2010-11-26 16 views
2

私はAクラスとBクラスのマッピングを持っています。ここで '1'側はAで、 'many'側はBです。B参照A外部キーがNULL可能でない場所。 FluentNHを使用したBのCascade.Delete()としてのAのマッピング。 Aを削除しようとすると、NHibernateはBを更新し、外部キーをnullに設定しようとします。したがって、外部キーがNULL可能ではないため、エラーが発生します。1対多の関係でNHibernate削除の問題

どうすればよいですか?外部キーをNULL可能にしますか?

EDIT:外部キーをnullに設定すると動作します。しかしこれは正しい方法ですか?

答えて

4

別の解決策は次のとおりです。

HasMany(a => a.B).Cascade.AllDeleteOrphan().Inverse(); 

aBClear()がすべてのBを削除したい場合はDeleteOrphanが必要です。

EDIT:あなたが唯一の削除カスケード接続されているので、単に削除するために、ここにある:逆属性は、AからBへの関係のために、それは(つまり、Bの逆であることを言っている

HasMany(a => a.B).Cascade.Delete().Inverse(); 

)(データベースにFKを持っています)。あなたは逆順についてもっと読むことができますInverse Attribute in NHibernate

0

これは項目のコンテキストなしでは答えにくいです。

問題のドメインでは、Aを持たないBを持つことは有効ですか?

もしそうなら、外部キーはNULL可能である可能性があります。

もしそうでなければ、親AのすべてのBsを削除する方法を見つける必要があります。

1

これは、レコードの外部キー列をNULLに設定しようとするためですが、その列にNULLを許可しないため、データベースサーバーはエラーをスローします。 )(.Cascade.AllDeleteOrphanを(使用してみてください)の代わりに、Cascade.Delete:マッピングクラスで

:私が出会った

HasMany(x => x.B) 
     .Inverse() 
     .Cascade.AllDeleteOrphan() 
     .KeyColumn("foreignKeyID"); 
+0

あなたのソリューションはうまくいくと思いますが、AllDeleteOrphan()ではなくInverse()のためだと思います。私はCascade.Delete()で試してみました。 – Iain

関連する問題