如何使用TPT继承控制EF6 DB模型中SQL更新的顺序?

时间:2016-02-04 19:47:05

标签: c# sql-server entity-framework inheritance

鉴于以下课程......

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)。

问题

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

1 个答案:

答案 0 :(得分:0)

您无法指定保存订单

  

当您调用SaveChanges时,所有实体都是从内部订购的   在方法“ProduceDynamicCommands”中按顺序再次排序   方法“TryTopologicalSort”循环添加命令没有   前任左(如果你添加A和B,A依赖于B,那么B将是   在A)之前插入

除非您覆盖 A LOT 的内部方法(我必须这样做以开发BulkSaveChanges功能),否则无法指定订单。