基于播种期间视图的播种表

时间:2014-06-11 08:51:11

标签: c# sql entity-framework entity-framework-6 dbcontext

我有一个棘手的问题,我无法弄清楚如何解决。

我在我的迁移脚本中使用std EF 6(代码优先)种子,我为我们的系统播放了大约20个带有静态元数据的表。

但是,我也有一个观点,我希望将“内容”播种到另一个表中(以解决EF CF不允许外键访问视图,因此没有“真正的”关联)

所以我想做以下事情:

  1. 带有数据的种子表1
  2. 在此
  3. 之上创建视图
  4. 种子表2,包含来自视图的数据
  5. 我的问题是播种是在上下文和交易中完成的。所以上面的“第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));
    }
    

    所以我将上下文传递给我的函数,在那里我尝试从视图中播种。

0 个答案:

没有答案