代码之家  ›  专栏  ›  技术社区  ›  BennoDual

NHibernate-SQL Server CE-删除级联不起作用

  •  0
  • BennoDual  · 技术社区  · 13 年前

    我有两张桌子:

    • 收据
    • 接收日志

    Receipt 有0…n ReceiptJournals

    此的映射(在 收据 )看起来像:

    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();
    

    我得到一个例外:

    无法执行本机批量操作查询:从收据中删除 其中IsFinished=0且IsParked=0[SQL:从Receipt中删除,其中 IsFinished=0且IsParked=0]

    系统异常{NHibernate.Exceptions.GenericADOException}

    [System.Data.SqlServerCe.SqlCeException]{”Der Prim?rschlsselwert 尽管如此,Schlsel公司的Verweise公司也没有 沃尔汉登有罪。[外键约束名称= FK_Receipt_ReceiptJournal]“}系统数据.SqlServerCe.SqlCeException

    SQL Server CE的NHibernate是否不支持级联删除,或者我做错了什么?

    1 回复  |  直到 10 年前
        1
  •  0
  •   Jamie Ide    13 年前

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