2011-03-31 17 views
0

同様の質問がされましたが、ここでは答えが見つかりません。私は、次の流暢な関係はマップされています:私は親(フィルター・エンティティ)を削除しようとすると流暢NHibernateカスケード削除エラー

HasMany<UserFilter>(x => x.UserProjectFilters) 
      .KeyColumns.Add("UserProfileID") 
      .Cascade.All() 
      .AsSet() 
      .Inverse() 
      .Cache.ReadWrite(); 

は、削除がカスケードされません。私は例外が表示されています: "DELETE文がREFERENCE制約と競合しました..."。 NH Profilerでは、Deleteステートメントが親に対して生成されているが、子に対しては生成されていないことがわかります。親の前に実行されるすべての子に対する削除が期待されます。私は間違って何をしていますか?ここで

は関係のUserProfileFilterの終わりです:

References<Filter>(x => x.Filter) 
      .Column("FilterID") 
      .LazyLoad() 
      .Cascade.SaveUpdate(); 

ありがとうございました!私はあなたがこれは、子テーブルの上に複数の外部キーを持つ問題になってしまった、と間違ったキーがマッピングで使用されていたInverse()

+1

は、フィルタとそれが何を見に戻って、子供の参照に)(.Cascade.SaveUpdateを取り出す試してみてください。あなたの関係を単純化すれば、問題を解決するのに役立つかもしれません。 SQLを見れば、まず親(Filter)を削除しようとしているのでしょうか? –

答えて

1

ような関係を設定したとして、あなたがCascade.AllDeleteOrphan()が必要だと思う アンディ

1

。上記のコードを次のように変更しても問題ありません。

HasMany<UserFilter>(x => x.UserProjectFilters) 
      .KeyColumns.Add("FilterID") 
      .Cascade.All() 
      .AsSet() 
      .Inverse() 
      .Cache.ReadWrite(); 

ありがとうございました!

アンディ

+0

すばやい返信をありがとうが、残念ながらこれはうまくいきませんでした。私は、NH例外が表示されます: "バッチクエリを実行する際に例外が発生しました"と、残念なことに、先読みはありません。これはAllDeleteOrphanを除いて私が見ていたのと同じ例外ですが、InnerExceptionはそれには外部キー違反を示していません。 – Andy

+1

それは奇妙なセットアップのようです - 私は通常M対1の関係の両端がカスケードしていません。自分でスキーマを作成したか、NHibernateでスキーマを作成しましたか? –

+0

スキーマを手動で作成しました。子コレクションのマッピングでCascade.SaveOrUpdateを削除すると、「DELETE文がREFERENCE制約と競合しました...」というエラーが表示されます。他の考え? – Andy