私はこのマッピングを1つのクラスに持っています:
<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 */});
そして、トランザクションをコミットします。親への変更は update 呼び出しでデータベースに保存されますが、カスケード値または inverse=true/false/just-save-already に関係なく、それらの子を挿入することはできません。私はしばらくの間、例/ドキュメント/などを読んで頭を悩ませてきましたが、なぜうまくいかないのかわかりません。簡単なものがありませんか?サーバーを強制終了し、変更のたびに再構築して、更新されていることを確認してきましたが、.
さらに悪いことに、逆のさまざまな値を使用して、時には Request=parent を子に追加することによって、時には追加する前に子を個別に保存することによって、うまくいくことがあります...そして、後で作業を終了します。私は途方に暮れています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つの主要なものすべてで、運がありません。