Il s'agit d'une nouvelle question, donc désolé à l'avance. J'utilise NHibernate couramment et j'obtiens un comportement étrange à ce sujet.Mettre à jour automatiquement les deux extrémités d'une relation un à plusieurs avec NHibernate
J'ai deux classes qui ressemblent à ce que (simplifié):
public class Group
{
public virtual int Id{get;protected set;}
public virtual String Name{get;set;}
public virtual List<Person> Persons {get; protected set;}
}
public class Person
{
public virtual int Id{get;protected set;}
public virtual String Name{get;set}
public virtual Group Group {get;set;}
}
Et les applications groupe:
Id(x=>x.Id)
Map(x=>x.Name)
HasMany(x=>x.Persons).Cascade.All.Inverse()
Personne:
Id(x=>x.Id)
Map(x=>x.Name)
References(x=>x.Group)
Maintenant, dans mon code Je veux déplacer une personne que j'ai à un autre groupe. Comme il est une relation, je pensais que je pourrais simplement faire
myPerson.Group = anotherGroup;
_mySession.SaveOrUpdate(myPerson);
_mySession.Flush()
Si je fais cela, la base de données est mise à jour correctement, mais si je tente de regarder dans la liste des personnes de l'objet « anotherGroup » Je ne t voir l'objet "myPerson", qui est toujours dans la liste des personnes de l'ancien groupe. Donc, y a-t-il un moyen de dire à NH de recharger la liste, ou de la faire toujours mettre à jour?
La seule solution que j'ai trouvé est maintenant ceci:
myPerson.Group.Persons.Remove(myPerson);
anotherGroup.Persons.Add(myPerson);
myPerson.Group = anotherGroup;
_mySession.Flush()
Mais je trouve un peu sale ...
Toute idée sur ce que je fais mal? Merci!
Eh bien, en fait, c'est ce que je fais maintenant Je ne les ai pas montrés ici pour simplifier, mais je pensais que NH ferait ce travail pour moi, n'est-ce pas? Merci pour le lien, très intéressant. – Gimly
@Gimly - malheureusement, maintenir ces relations est votre responsabilité. – DanP
Des indices sur pourquoi c'est le cas? Je pense que dans Linq2Sql ces relations étaient automatiques. Est-ce que les futures versions vont changer cela? – Gimly