如何使用 TPT 继承控制 EF6 数据库模型中 SQL 更新的顺序

本文关键字:SQL 更新 顺序 数据库模型 EF6 何使用 TPT 继承 控制 | 更新日期: 2023-09-27 18:33:26

给定以下类...

public class BaseClass
{
    [Key]
    public int ID { get; set; }
    public DateTime LastUpdatedDate { get; set; }
}
public class InheritedClass : BaseClass
{
    public string RandomValue { get; set; }
}

。它们分别使用 EF6 中的 TPT 继承策略映射到 SQL 表 tblBaseClass 和 tblInheritedClass。

当我使用以下代码创建记录时...

var newClass = new InheritedClass {
    RandomValue = "Some Random Text",
    LastUpdatedDate = DateTime.Now
};
dbContext.InheritedClasses.Add(newClass);
dbContext.SaveChanges();

。首先将数据插入到 tblBaseClass 中,然后插入到 tblInheritedClass 中。但是,当我使用类似的方法更新记录时...

var existingClass = dbContext.InheritedClasses.Find(someKeyValue);
existingClass.LastUpdatedDate = DateTime.Now;
existingClass.RandomValue = "Some Different Random Text";
dbContext.SaveChanges();

这些表以相反的顺序更新(具体而言,更新 tblInheritedClass,然后更新 tblBaseClass)。

问题

如何指定在此方案中首先更新基类表?我正在继承表的数据库中创建一个触发器来跟踪值更改,但是当我这样做时,我需要引用基表中的日期。

如何使用 TPT 继承控制 EF6 数据库模型中 SQL 更新的顺序

无法

指定保存顺序

调用 SaveChanges 时,所有实体都从内部排序 在方法"ProduceDynamicCommand"中的顺序,然后再次按 方法"TryTopologicalSort"哪个循环添加命令,没有 前身左(如果加上 A 和 B 并且 A 依赖于 B,那么 B 将是 插入在 A)

之前

除非您覆盖很多内部方法,否则您无法指定订单(我必须这样做才能开发批量保存更改功能)。