PersonCompany への参照を持つテーブル Communication があります。PersonCompany のマッピングでは、この参照に対して Cascade-Delete を定義しました。
this.HasMany(x => x.Communications)
.AsSet()
.KeyColumn("PersonCompanyId")
.Fetch.Select()
.Inverse()
.Cascade.Delete();
しかし、次の HQL-Query を実行すると、次のようになります。
var sql = "delete from PersonCompany where Person.Id in (:idList) or Company.Id in (:idList)";
と
var query = NHibernateHelper.CurrentSession.CreateQuery(sql);
query.SetParameterList("idList", contactIdList);
query.SetTimeout(0);
query.ExecuteUpdate();
私はいつもこのSqlExceptionを取得します:
DELETE ステートメントは、REFERENCE 制約 "FK_PersonCompany_Communication" と競合しました。データベース「proconact」、テーブル「dbo.Communication」、列「PersonCompanyId」で競合が発生しました。ステートメントは終了されました。
NHibernate は、Communication で参照されているレコードをカスケード削除する必要があると思います。そうではありませんか?
私が間違っていること、誰かが私を助けてくれることを願っています。