2009-05-09 10 views
1

で1対多の更新:私は次のクラス/関係構造を有する修正役割システムを構築しようとしている流暢NHibernateは

プロジェクト ProjectRole 従業員

ProjectEmployee 3つのエンティティをマップします。

私は、ProjectからProjectEmployeeへの1対多のマッピングと、ProjectEmployeeからProjectへの参照マッピングを持っています。

私は新しいProjectEmployeeをちゃんと追加することができます(つまり、Createアクティビティもうまくいきます)が、従業員ごとに1つのエントリしか持たないように制約を設定したいと考えています。これは、更新アクティビティのロジックに影響します。一緒にこのハッキングで

は、私がこれを行うにはなど、

をし、適切な役割とProjectEmployeeの新しいインスタンスを追加する(新しい一覧に値を設定することで)Project.ProjectEmployeesを空にしようとしていますProject.ProjectEmployeesを空のListに設定することに関連するエラーが表示されます。

"'ProjectId'列、 'AppDB.dbo.ProjectEmployees'列にNULL値を挿入できません。列はNULLを許可しません。更新は失敗します。 文は終了しました。

リストを更新する行を削除すると、後続のレコードが追加されますが、従業員一人あたりのレコード数が多すぎます。

ここに私のプロジェクトだ - > ProjectEmployeesマッピング:

mapping.HasMany<ProjectEmployee>(x => x.ProjectEmployees)  
    .Cascade.All() 
    .WithKeyColumn("ProjectId"); 

そしてProjectEmployeeでのマッピング - >プロジェクト:

は、単純な右べきか?

AddProjectEmployeeというProjectクラスにメソッドを追加して問題のEmployeeを検索し、存在する場合はProjectEmployeeを削除してから、新しいProjectEmployeeを追加します。私はこれを呼び出すと同じエラーが発生します。

ご協力いただければ幸いです。

ニック

答えて

1

これはcross-posted on the Fluent NHibernate groupだったとハドソンAkridgeによってそこに答えました。 Hudson氏によると、解決策はNHibernateが変更を追跡できるようにコレクションにClear()を使用することです(NHを知らないインスタンスを参照するためにコレクションを新規に作成するのに対して)。

+0

ありがとうスチュアート。私もFNHグループの回答を見ましたが、Clearは実際に私の問題を解決しました。 – nkirkes

関連する問題