私は以下のオブジェクトモデルを持っています(変更できない従来のテーブル構造に基づいています)。NHibernateを「非正規化」テーブルにマッピングする
public class Store
Contact BillingContact {get;set;}
Contact SetupContact {get;set;}
ISet<Contact> Contacts {get;set;}
このシナリオでは、新しいストアを作成するときに、連絡先リストに新しい連絡先も追加します。また、その連絡先をBillingContactとSetupContactの参照に設定する必要があります。その後、1つのトランザクションとしてロットを保存します。参照をBillingContactとSetupContactに設定せずにストアを保存すると、すべて正常です。しかし、これらのプロパティを設定すると、NHibernateはInsertの後にUpdateを実行して参照を更新しようとしますが、Storeが実際にはまだ挿入されていないのでエラーが発生します。
トリガまたはストアドプロシージャを使用する必要があるようですが、NHibernateの方法があることを期待しています。
実行中のSQLは、次に
INSERT INTO CONTACTS (Id, CompanyId, Name, etc.) Values (1234, NULL, "My Contact", etc.) NOTE: 1234 was retrieved from a sequence
その後
INSERT INTO company (Id, BillingContactId, SetupContactId) Values (8946, 1234, 1234)
ある - インサートが、最後の文が失敗したコミットされていないので、エラーがあるため、この
UPDATE CONTACTS SET CompanyId=8946 WHERE CUSTOMER_ID = 1234 AND TimeStamp = xxx
です。
エラーが 行が更新または削除別のトランザクションによって(または保存されていないと値のマッピングが間違っていました)している[顧客番号1234]
Sql nHibernateの実行中、保存コード、および取得しているエラーを含めることはできますか? –