0

私は2つのテーブルを持っています:

  • レシート
  • レシートジャーナル

Receipt0...nReceiptJournals

この ( のReceipt) マッピングは次のようになります。

this.HasMany(x => x.ReceiptJournals).AsSet().Fetch.Select().Inverse().Cascade.Delete();

私が使用している基礎となるデータベースは SQL Server CE 4.0 です。

今、削除ステートメントを実行すると

const string sql = "delete from Receipt where IsFinished = 0 and IsParked = 0";
var query = NHibernateHelper.CurrentSession.CreateSQLQuery(sql);
query.ExecuteUpdate();

例外があります:

ネイティブ一括操作クエリを実行できませんでした: IsFinished = 0 および IsParked = 0 の領収書から削除します[SQL: IsFinished = 0 および IsParked = 0 の領収書から削除]

System.Exception {NHibernate.Exceptions.GenericADOException}

[System.Data.SqlServerCe.SqlCeException] {"Der Primärschlüsselwert kann nicht gelöscht werden, da noch Verweise auf diesen Schlüssel vorhanden sind. [ 外部キー制約名 = FK_Receipt_ReceiptJournal ]"} System.Data.SqlServerCe.SqlCeException

SQL Server CE を使用する NHibernate はカスケード削除をサポートしていませんか、それとも間違っていますか?

4

1 に答える 1

0

あなたはおそらくしたいですCascade.AllDeleteOrphan()。これはタイミングの問題です。NHibernate は最初に Receipt から削除しようとしますが、外部キー制約のために削除できません。カスケード戦略を AllDeleteOrphan() に設定すると、ReceiptJournal レコードは孤立するため、最初に削除されます。

于 2013-03-12T13:10:06.183 に答える