これは、私が以前に尋ねたこの質問に関連しています。
マッピングでは期限Request
に設定し、マッピングではカスケードをなしに設定しています。SaveUpdate
Discount
次の 2 つのシナリオがあります。
1 つ目は、新規リクエストと新規ディスカウントです。両方を作成し、割引をリクエストに追加してリクエストを保存しました。これは期待どおりに機能します。
次のシナリオは、新しいリクエストと既存の割引です。これは正しく機能していません。その理由はわかりません。以下は、テストで実行された SQL ステートメントです (値は省略します)。
NHibernate: INSERT INTO Requests NHibernate: SELECT @@identity NHibernate: INSERT INTO DiscountRequests (DiscountId, RequestId) VALUES (3, 5); NHibernate: UPDATE Discounts NHibernate: DELETE FROM DiscountRequests WHERE DiscountId = 3;
最後の行が問題です。3 行目から戻って挿入を削除しています。Request オブジェクトに適用しているコマンドはsession.Save(request);
、他には何もありません。
Delete の呼び出しが行われる理由はありますか?
編集:
コードの更新
public void Add(Request request)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(request);
transaction.Commit();
}
}
}
割引マッピング
<join table="DiscountRequests" optional="true">
<key column="DiscountId" />
<many-to-one name="Request" column="RequestId" cascade="none" />
</join>
リクエスト マッピング
<join table="DiscountRequests" optional="true">
<key column="RequestId" />
<many-to-one name="Discount" column="DiscountId" cascade="save-update" />
</join>
ttp://stackoverflow.com/questions/14837373/zero-to-one-relationship-nhibernate-mapping