2012-06-28 16 views
5

私は多くの注文を持つエンティティ会社を持っています。私は会社のために新しい注文を作成し、それを保存しようとすると、私はSQLエラーを取得NHibernate Fluent HasManyマッピングはNULLを挿入します。外部キー

会社

HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse(); 

注文が

References(x => x.Company).Column("CompanyID") 

:私はお互いに次のようにこれらをマッピングし: "列 'CompanyID'、テーブル 'Orders'に値NULLを挿入できません;列はNULLを許可しません。INSERTは失敗します。

(これで生成されたSQL文:INSERT INTO注文(名前、企業ID)VALUES();選択SCOPE_IDENTITY()]]??)

確かに私がする企業IDを設定するための論理的なエラーですヌル可能ではありません。

逆の場合、私はCompanyIDが正しいIDで満たされることを期待しましたが、私の人生では、私はそれを働かせることができません。私はInverseを取り除こうとしました(動作は全く変わらない)、カスケードを変更し、nullableでないように参照を設定しました。

私はNHibernateをユーモアするためにテーブル内のカラムをnullableにしました。しかしそれはのように孤立した注文を私に残しました。は注文記録を作成しましたが、CompanyID NULLを残しました。

これは私が新しい順作られた私のtestcodeです:ところで

Company test = RepositoryBase<Company>.GetById(1); 
test.Orders.Add(new Order("test")); 
RepositoryBase<Company>.SaveWithTransaction(test); 

更新は、すべての罰金行きました。

とにかく、ここの誰かが私のマッピングで間違っていたものを見てほしいと思っています。

ありがとうございます。

答えて

4

ご注文で会社を設定するのを忘れ

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

逆にのみ順番にIDを挿入するためのオブジェクトに会社への参照を使用しているNHを伝えます。

2

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

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

.. w。 h。 y。 ? .. – Tushar

+0

@タシャール私は知らない!覚えていない。 –

+0

O_O。だからあなたは答えのコードを説明する必要があります。 :) – Tushar

関連する問題