0

我有两张桌子:

  • 收据
  • 收据日志

Receipt有 0...nReceiptJournals

此 (in 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

NHibernate 与 SQL Server CE 不支持级联删除还是我做错了什么?

4

1 回答 1

0

你可能想要Cascade.AllDeleteOrphan(). 这是一个时间问题,NHibernate 试图首先从 Receipt 中删除,但由于外键约束而无法删除。将级联策略设置为 AllDeleteOrphan() 将导致它首先删除 ReceiptJournal 记录,因为它们将被孤立。

于 2013-03-12T13:10:06.183 回答