这是一个新问题,所以提前抱歉。
我正在使用流畅的NHibernate并在其上获得一个奇怪的行为。
我有两个看起来像这样的类(简化):
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;}
}
和映射 组:
Id(x=>x.Id)
Map(x=>x.Name)
HasMany(x=>x.Persons).Cascade.All.Inverse()
人:
Id(x=>x.Id)
Map(x=>x.Name)
References(x=>x.Group)
现在,在我的代码中,我想将一个人移动到另一个组。因为这是一种关系,我以为我可以简单地做到
myPerson.Group = anotherGroup;
_mySession.SaveOrUpdate(myPerson);
_mySession.Flush()
如果我这样做,数据库会正确更新,但如果我试图查看对象“anotherGroup”的人员列表,我看不到对象“myPerson”,这仍然是旧组的人员列表。
那么,有没有办法让NH重新加载列表,或者让它一直更新。
我现在找到的唯一解决方法是:
myPerson.Group.Persons.Remove(myPerson);
anotherGroup.Persons.Add(myPerson);
myPerson.Group = anotherGroup;
_mySession.Flush()
但我发现它有点脏......
对我做错了什么的任何想法?谢谢!
答案 0 :(得分:3)
使用辅助方法来简化这一过程;在小组你想要的东西:
RemovePerson(person)
AddPerson(person)
您可能会发现本文对其他指南很有帮助:Strengthening your domain: Encapsulated collections。
答案 1 :(得分:2)
@Gimly L2S中的关系是自动的,因为它使用自定义集合(NHibernate与标准接口一起使用,并且可以在实例化之后将其保存为集合,例如,List)。然而,有一些关于如何改进的非正式谈话,但没有任何内容,因为它具有非常低的优先级,因为简单的解决方法(上面的答案)