如何在DbMigrationConfiguration Derived类中按顺序运行AddOrUpdate

时间:2016-09-20 08:45:30

标签: c# entity-framework-6

我启用了迁移,我编写了种子代码,如下所示:

protected override void Seed(DbContext c)
{
 c.DbSet<Table1>.AddOrUpdate(..);
 c.DbSet<Table2>.AddOrUpdate(..);
 c.DbSet<Table3>.AddOrUpdate(..);
}

我需要按顺序运行table1,因为table2引用table1,table3引用table1和table2。

但EF6优化了代码生成的T-SQL批处理,他们在table1中查询table3的引用,并且由于table1尚未初始化,因此没有任何内容,并且EF6抛出异常。

1 个答案:

答案 0 :(得分:1)

如果您已在应用程序上下文类中定义了DbSets,例如Table1,则为:

public DbSet<Table1> Table1 { get; set; }

为什么不尝试写这样的语句:c.Table1.AddOrUpdate(...)?如果这不起作用,您可以尝试在每个语句后添加c.SaveChanges(),以便在继续执行下一个语句之前将对Table1所做的任何更改保存到数据库中。当然它会慢一些,但如果不经常运行种子方法,那么这可能不是问题吗?