结构: TypeA具有TypeB的集合,TypeB具有TypeC的集合。
TypeB和TypeC很多。
TypeA映射
HasMany<TypeB>(t => t.TypeBList).CascadeAll().Inverse()..
TypeB映射
HasManyToMany<TypeC>(t => t.TypeCList).Casecade.All().Inverse()..
TypeC映射
HasManyToMany<TypeB>(t => t.TypeBList).Casecade.None()...
TypeB有一个方法
Add(TypeC typec) { typec.TypeBList.Add(this); TypeBList.Add(typec); }
我需要为typeb集合添加一个新的typec,但是 我想通过调用repo.Save(typeA)来保存,但是我收到了共享集合问题,因为TypeA和TypeC都存在TypeB。
var typec = new TypeC { TypeBList = typea.TypeBList, .... }
typea.TypeBList[0].Add(typec);
repo.save(typea);
通过保存typea这不起作用,我是否被迫获得一个typeb并在那里进行更改?
答案 0 :(得分:0)
对象上的集合通常不应该在大多数时间共享,特别是在使用NHibernate时,您甚至不应该更改集合实例。更好地复制内容。
obj1.ListA.Clear();
foreach(var item in obj2.ListA)
obj1.ListA.Add(Item);
更新:为什么?
因为NHibernate用自己的集合类替换集合实例以启用延迟加载和更改跟踪。