當我使用Nhibernate 3更新子項時,子項中刪除的項目不會從數據庫中刪除。當更新子集合時,NHibernate不刪除無用的記錄
案例描述如下
class Parent {
string Id;
string Name;
IList Children;
}
class Child {
int ChildId;
string Name;
string Value;
Parent parent;
}
HDM映射文件顯示以下 Parent.hdm.xml
<bag name="Children" table="ClientsExt" inverse ="true" cascade="all-delete-orphan" lazy="false">
<key column="ChildId"/>
<one-to-many class="XXXX.Child, XXX"/>
</bag>
Child.hdm.xml
<many-to-one name="Parent" column="Id" class="XXXX.Parent, XXX" not-null="true"/>
讓我們假設有現有的父其中將數據庫中的一組兒童關聯起來
Parent Table
Id = "P1", Name = "Test"
Child Table
ChildId = 1, Id="P1", Name = "N1", Value = "V1"
ChildId = 2, Id="P1",Name = "N1", Value = "V2"
ChildId = 3, Id="P1",Name = "N2", Value = "V3"
在我的情況下,我需要部分更新孩子。 在更新的Parent中需要更新記錄2 設置值ChildId = 2,值=「NEWVALUE」 和刪除 ChildId = 1,Id =「P1」,Name =「N1」,Value =「V1 「 和ChildId 3將被保留。
,所以我得到了家長從數據庫首先,
var entity = _parentRepo.getById("P1");
var children = entity.Children;
var updatedChildren = children.ToList<Child>;
var tmpList = new List<Child>();
//biz means the business logic object which contains update info
if (biz.N1.Count > 0){
var existN1 = children.Where(x=>x.Name.Equals("N1")).Select(y=>y.ChildId);
int count = existN1.Count;
int index = 0;
biz.N1.ForEach(x=>{
if(index < count){
tmpList.Add(new Child(){ Id = existN1[index],Name="N1",Value="newValue",Parent = entity });
}else{
tmpList.Add(new Child(){ Name="N1",Value="newValue",Parent = entity });
}
});
updatedChildren.RemoveAll(x=>x.Name.Equals("N1"));
updateChildren.AddRange(tmpList);
}
entity.Children = updateChildren;
//Save the entity
然而,在數據庫,記錄2更新值設定爲 「NEWVALUE」,但並沒有消除childID的= 1,ID =「P1 「,名稱=」N1「,值=」V1「。 爲什麼?
在此先感謝。
更改最後幾個代碼,然後生活變得輕鬆。 'entity.Children.Clear(); updateChildren.ForEach(x => entity.Children.Add(x)' – user1438980