我有一个ASP MVC Web应用程序我正在努力解决突然发生的NHibernate问题。
让我们首先看看我的映射,标准的父子映射:
父
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="IWA.Model" assembly="IWA.Model">
<class name="Parent" table="Parent" lazy="false">
<id name="Id" column="IdParent" >
<generator class="identity" />
</id>
<bag name="Children" table="Child" cascade="delete" inverse="true">
<key column="IdParent" />
<one-to-many class="Child" />
</bag>
</class>
</hibernate-mapping>
儿童
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="IWA.Model" assembly="IWA.Model">
<class name="Child" table="Child" lazy="false">
<id name="Id" column="Id" >
<generator class="identity" />
</id>
<property name="Text" column="Text" />
<many-to-one name="Parent" column="IdParent" class="Parent" />
现在出现问题:
我在一个ActionResult中有多个保存语句,例如:
var parent = _service.GetParent(id);
_service.SaveChild{ Text = "Save1", Parent = parent };
_service.SaveChild{ Text = "Save2", Parent = parent };
当我运行这个时,我在NHProf中看到2个插入,在第2个插入后看到1个更新,所以基本上第一个孩子用第二个子进行更新。这导致有2个孩子使用文本Save2。
为什么会这样?我该如何防止这种情况?
*注意:我在同一个父母中有其他没有这种行为的儿童收藏品,非常奇怪......