我有一个由NHibernate实现并使用Lazy Loading的项目。 我在这个项目中有两个班级:人员和家庭。 这两者之间的关系是聚合,是指一个人有一个家庭列表。 映射是:Cascade中的错误:具有相同标识符值的不同对象已与会话相关联
<class name="Person" table="Person_Person" >
<id name="Id" type="Int64" unsaved-value="0">
<generator class="native" />
</id>
<bag name="Families" inverse="true" table="Person_Family" cascade="all-delete-orphan" >
<key column="Person_id_fk"/>
<one-to-many class="Domain.Entities.Family,Domain.Entities"/>
</bag>
</class>
在这个项目中,我得到一个人的ID,然后更新一个家庭的家庭的人。
Person person = SessionInstance.Get<Person>(id);
foreach (Family fam in person.Families)
if (fam.Name == "Jaun")
{
fam.Code = 100;
SessionInstance.Update(fam);
}
家庭没有更新,因为此消息抛出异常: '不同的对象使用相同的标识符值已经与会话相关联:193,实体:Domain.Entities.Family
我如何更新一个人的家庭?
我测试你的建议,但没有解决我的问题。 仍然抛出相同的异常。 – Ehsan
我想那么你需要确保同一个人对象,即具有相同的ID,不应该在会话中的其他地方加载。 @ehsanzeynali – Zohaib
我不确定这是什么意思?自然人在会议上加载因为我需要人的家人。由这段代码'Person person = SessionInstance.Get(id); '。 –
Ehsan