2011-01-13 5 views
2

私はエンティティ、コメント、およびタスクの2種類を持っています。どちらのタイプもユーザーがブックマークすることができます。だから私は、[ブックマーク]というテーブルを作成しました:流暢NHibernate - 複数のChildKeyColumnsを持つHas​​ManyToManyが可能ですか?

CREATE TABLE [dbo].[Bookmarks] (
[ID] [int] IDENTITY(1,1) NOT NULL, 
[FKUserID] [int] NOT NULL, 
[FKCommentID] [int] NULL, 
[FKTaskID] [int] NULL) 

私のUserエンティティのためのこれらの関係のマッピングは次のようになります。すべてがうまく働くだろう

var bookmarks = Component(x => x.Bookmarks, x => x.HasManyToMany(b => b.Comments) 
.Table("Bookmarks") 
.Access.CamelCaseField() 
.ParentKeyColumn("FKUserID") 
.ChildKeyColumn("FKCommentID") 
.AsBag() 
.LazyLoad()); 

bookmarks.HasManyToMany(b => b.Tasks) 
    .Table("Bookmarks") 
    .Access.CamelCaseField() 
    .ParentKeyColumn("FKUserID") 
    .ChildKeyColumn("FKTaskID") 
    .AsBag() 
    .LazyLoad(); 

私は思いますが、いないときデータベースオブジェクトは、NHibernate自体から最初から作成されます。 [Domain.Model.User.Domain.Model.User.Bookmarks.Tasks#1] [SQL:INSERT INTOブックマーク(コレクションを挿入することができませんでした。それから私は素敵なエラーメッセージ

NHibernate.Exceptions.GenericADOExceptionを取得しますFKUserID、FKTaskID)VALUES(@ p0、@ p1)] ----> System.Data.SqlClient.SqlException: 'FKCommentID'列に値NULLを挿入できません 'xyzautomatedtests.dbo.Bookmarks'テーブル。列はNULLを許可しません。 INSERTは失敗します。 ステートメントが終了しました。

確かに私はこのテーブルの代わりに2つのテーブルを使用していた可能性がありますが、これを実行する方法はありませんか?不幸なことに、私は構成内のこれらの2つの子列をNULL値に設定する方法を見つけることができません。

ヒント

+0

どのバージョンの.Netを使用していますか? – Richard

答えて

2

テーブル定義を再度確認してください。 SQLExceptionはデータベースからまっすぐに来るので、あなたが持っている問題は.Netからではなく、データベースからのものです。

ブックマークテーブルのFKCommentID列が実際にNullableであることを確認してください。