[英]NHibernate 'Where' Clause causing problems on cascading deletes
[英]NHibernate cascading problems
我在一類中有此映射:
<class name="Parent">
<set name="Activity" table="ChangeLogs" order-by="ChangeDate desc" cascade="all-delete-orphan">
<key column="RequestID" />
<one-to-many class="ChangeLog" />
</set>
而在另一個:
<class Name="Child">
<many-to-one name="Request" class="Request" column="RequestID" />
在父級中,加載到當前事務中,然后添加到集合中:
parent.Activity.Add(new Child(){/* properties, etc */});
然后我提交交易。 對父級所做的任何更改都將通過更新調用保存到數據庫中,但是無論級聯值還是inverse = true / false / just-aaveyy,我都無法插入這些子級。 我一直在反對它一段時間,閱讀示例/文檔/等等,但我看不出為什么它不起作用。 我是否缺少簡單的東西? 為了確保一切都在更新,我一直在殺死服務器並重新構建,以確保一切正常。
更糟糕的是,偶爾它已經加入...然后就退出工作以后才另行制定,與逆各種值,有時由搶救孩子的加入請求=父到子,有時。 我在吵架o_O
編輯:自從發布以來,事情已經明確嘗試過,重建+服務器重新啟動之間,沒有一個會產生插入調用或錯誤:
<set inverse=true>
parent.Activity.Add(new Child(){Request=parent})
<set inverse=true>
parent.Activity.Add(new Child(){})
<set>
parent.Activity.Add(new Child(){Request=parent})
<set>
parent.Activity.Add(new Child(){})
<set inverse=false>
parent.Activity.Add(new Child(){Request=parent})
<set inverse=false>
parent.Activity.Add(new Child(){})
這確實有效:
<set>
Child c = new Child() {Request = parent};
parent.Activity.Add(c);
Session.Save(c);
但是,如果忽略它,設置級聯又有什么意義呢?
編輯:讀完以下內容: http : //nhibernate.info/doc/nh/en/index.html#example-parentchild-bidir我嘗試了:
<class Name="Child">
<many-to-one name="Request" class="Request" column="RequestID" not-null=true />
以上所有6個主要項目都沒有運氣。
對我來說,一次性正確設置始終是一個問題。 最初,您的代碼中的所有內容看起來都不錯,但實際上我想知道您是在哪一側設置inverse屬性?
該代碼對我有用:
<class name="Parent" table="Parent">
<bag name="Languages" inverse="true" cascade="all-delete-orphan" lazy="false" fetch="join">
<key column="parentId" />
<one-to-many class="Language" />
</bag>
<class name="Language" table="Language">
<many-to-one column="parentId" name="Parent" class="Parent" not-null="true" />
我希望這有幫助。
這是正確的映射:
<class name="Parent">
...
<set cascade="all-delete-orphan" inverse="true" ...>
...
</set>
</class>
<class name="Child">
...
<many-to-one .../>
</class>
以及正確的用法(假設已經存在一個父對象):
using (var tx = session.BeginTransaction())
{
var parent = GetParent();
parent.Collection.Add(new Child { Parent = parent });
tx.Commit();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.