我在尝试更新Parent类
中的子项时遇到问题public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Child> MyChildren { get; set; }
}
public class Child
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Parent MyParent { get; set; }
}
我所做的是获取MyChildren列表中的一项并对其进行修改,但是当从会话中调用SaveOrUpdate方法时,MyClildren没有被保存。
注意:如果修改了父级中的其他字段,则会在DB中进行更新。
更新
<class name="Parent" table="Parent" lazy="true">
<id name="id" column="ID" type="int">
<generator class="identity" />
</id>
<bag cascade="all" lazy="true" name="MyChildren">
<key column="ID"/>
<one-to-many class="SND.Domain.Model.Child" />
</bag>
</class>
<class name="Child" table="Child" lazy="true">
<id name="id" column="ID" type="int">
<generator class="identity" />
</id>
<!-- Here i have another reference -->
<many-to-one name="AnotherEntity" class="SND.Domain.Model.AnotherEntity" column="entity_ID"/>
<property name="Name" column="Name" type="string" not-null="false" />
</class>
谢谢, 佩德罗
答案 0 :(得分:0)
我看不到您的映射文件,但您在父映射文件中的子集合集上是否有cascade属性?
答案 1 :(得分:0)
我认为这是一个映射问题,试试这个:
<bag generic="true" cascade="all" inverse="false" name="MyChildren">
<key column="ID"/>
<one-to-many class="SND.Domain.Model.Child" />
</bag>
<强> UPDATE1 强>
using (var session = SessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
session.SaveOrUpdate( ... );
tx.Commit();
}