我有一个棘手的问题,我无法弄清楚如何解决。
我在我的迁移脚本中使用std EF 6(代码优先)种子,我为我们的系统播放了大约20个带有静态元数据的表。
但是,我也有一个观点,我希望将“内容”播种到另一个表中(以解决EF CF不允许外键访问视图,因此没有“真正的”关联)
所以我想做以下事情:
我的问题是播种是在上下文和交易中完成的。所以上面的“第2步”将从空视图中播种,因为播种到Table1的数据是在单独的事务中完成的。
由于我无法首先访问EF代码中的视图,我尝试像这样播种Table2:
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();
}
}
VS在SqlQuery()上的工具提示告诉我,触发的查询将“脱离上下文”,但如果我使用像上面那样的参数,它将“在上下文中”。
但是 - 没有任何反应。
我在这里缺少什么?
(视图vClassificationTreeXml是带有XPaths / XQuery的Sql Server中Xml块的一个有点复杂的SQL视图,我宁愿不在c#中实现它)
更新:
我为我的表种子做了这种方法,即在我的configuration.cs文件中使用以下代码:
protected override void Seed(StorageContext context)
{
context.MyTable1.AddOrUpdate(MyTable1SeederSeeder.MyTable1s);
// ...
context.ClassificationTypes.AddOrUpdate(ClassificationSeeder.GetTypes(context));
}
所以我将上下文传递给我的函数,在那里我尝试从视图中播种。