多くの注文があるエンティティ会社があります。これらを次のように相互にマッピングしました。
会社
HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse();
注文
References(x => x.Company).Column("CompanyID")
しかし、会社の新しい注文を作成して保存しようとすると、次の SQL エラーが発生します。
(これは生成された SQL ステートメントです: INSERT INTO Order (Name, CompanyID) VALUES (?, ?); select SCOPE_IDENTITY()]])
実際に CompanyID を null 不可に設定したため、これは論理エラーです。
ただし、逆に、CompanyID が適切な ID で満たされることを期待していましたが、私の人生では、それを機能させることができません。Inverse を削除してみました (動作はまったく変わりませんでした)、カスケードを変更し、参照を null 不可に設定しました。
NHibernate のユーモアを表現するために、テーブル内の列を null 可能にしました。しかし、それはOrder レコードを作成したが、CompanyID NULL を残したので、孤立した Order を残しました。
これは、新しい注文を行ったテストコードです。
Company test = RepositoryBase<Company>.GetById(1);
test.Orders.Add(new Order("test"));
RepositoryBase<Company>.SaveWithTransaction(test);
ちなみに、更新はすべてうまくいきました。
とにかく、ここの誰かが私のマッピングで間違ったことを見てくれることを願っています。
前もって感謝します。