NHibernate - SQL Server CE - Delete Cascade not working

本文关键字:Cascade not working Delete CE SQL Server NHibernate | 更新日期: 2023-09-27 18:03:41

我有两个表:

    收据
  • ReceiptJournal

Receipt有0…n ReceiptJournals

这个的映射(在Receipt中)看起来像:

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

我使用的底层数据库是SQL Server CE 4.0。

现在,当我执行delete语句

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

我得到一个异常:

无法执行本机批量操作查询:从收据中删除where IsFinished = 0 and isparking = 0[SQL: delete from Receipt where ?IsFinished = 0 and isparking = 0]

系统。异常{NHibernate.Exceptions.GenericADOException}

[System.Data.SqlServerCe。SqlCeException] {"Der Primärschlüsselwertkann night gelöscht werden, da noch Verweise auf diesen schlsselvorhanden信德。[外键约束名称=。System.Data.SqlServerCe.SqlCeException

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

NHibernate - SQL Server CE - Delete Cascade not working

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