5

多くの注文があるエンティティ会社があります。これらを次のように相互にマッピングしました。

会社

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);

ちなみに、更新はすべてうまくいきました。

とにかく、ここの誰かが私のマッピングで間違ったことを見てくれることを願っています。

前もって感謝します。

4

2 に答える 2

4

注文に会社を設定するのを忘れました

test.Orders.Add(new Order("test") { Company = test });

inverse は、注文が Order オブジェクトの Company への参照を使用して Id を挿入することを NH に伝えるだけです。

于 2012-06-28T14:04:53.387 に答える
2

最初にこれを追加してください!!!

test.Orders.Add(new Order("test"){Company = test});
于 2012-06-28T14:06:38.177 に答える