C# 播种期间基于视图的播种表
我有一个棘手的问题,我真的不知道如何解决 我在迁移脚本中使用std EF 6(代码优先)种子设定,其中我为系统设定了大约20个带有静态元数据的表 然而,我也有一个观点,我希望的“内容”被植入到另一个表中(避免EF CF不允许外键访问视图,因此没有“真正的”关联) 因此,我想做以下工作:C# 播种期间基于视图的播种表,c#,sql,entity-framework,entity-framework-6,dbcontext,C#,Sql,Entity Framework,Entity Framework 6,Dbcontext,我有一个棘手的问题,我真的不知道如何解决 我在迁移脚本中使用std EF 6(代码优先)种子设定,其中我为系统设定了大约20个带有静态元数据的表 然而,我也有一个观点,我希望的“内容”被植入到另一个表中(避免EF CF不允许外键访问视图,因此没有“真正的”关联) 因此,我想做以下工作: 带数据的种子表1 在此基础上创建视图 从视图中为表2添加数据种子 我的问题是种子设定是在上下文和事务中完成的。因此,我上面的“步骤2”将从一个空视图中进行播种,因为播种到表1中的数据是在一个单独的事务中完成的 由
public static class MySeeder
{
public static ClassificationType[] GetClassificationTypes(StorageContext context)
{
return
context.Database.SqlQuery<ClassificationType>(
"select * from vClassificationTreeXml WHERE Id=@p1",
new SqlParameter("p1", 1))
.ToArray();
}
}
因此,我将上下文传递给我的函数,在那里我尝试从视图中进行种子设定。当您将所有内容包装到TransactionScope中时,您的种子设定方法中可以有多个
SaveChanges()
调用。我用种子设定代码更新了问题。但您真正建议我在事务作用域中添加Seed()方法中的所有内容,然后在每个种子设定步骤后添加context.SaveChanges()?是的,您当然可以这样做。设定(+保存)表格种子后,视图将具有FK值。在这种情况下使用TS并不少见。
protected override void Seed(StorageContext context)
{
context.MyTable1.AddOrUpdate(MyTable1SeederSeeder.MyTable1s);
// ...
context.ClassificationTypes.AddOrUpdate(ClassificationSeeder.GetTypes(context));
}