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不支持级联删除还是我做错了什么?
您可能需要Cascade.AllDeleteOrphan()
。这是一个时间问题,NHibernate试图先从收据中删除,但由于外键约束不能。将级联策略设置为AllDeleteOrphan()将导致它首先删除ReceiptJournal记录,因为它们将被孤立。