继承DbContext时,DatabaseInitializer不会运行

时间:2014-12-12 14:02:05

标签: c# entity-framework inheritance dbcontext

我正在尝试创建一个可以在我的所有项目中使用的通用DbContext,我希望它能够创建并播种一些表。所以我尝试使用DbInitializer但它似乎只在创建父上下文时起作用。如果我创建了另一个继承它的上下文,那么父节点永远不会被播种/初始化。

这甚至是正确使用的模式吗?

public class TestParentContext : DbContext
{
    static TestParentContext()
    {
        Database.SetInitializer<TestParentContext>(new TestInitializer());
    }
}

public class TestChildContext : TestParentContext
{
    static TestChildContext()
    {
        //no initializer
    }
}

public class TestInitializer : IDatabaseInitializer<TestParentContext>
{
    public void InitializeDatabase(TestParentContext context)
    {
        //this only gets run when calling Database.Initialize when used on a TestParentContext
        throw new NotImplementedException();
    }
}

//this will not throw the exception
using (TestChildContext ctx = new TestChildContext())
    ctx.Database.Initialize(true);

//this will throw the exception (as I want it to)
using (TestParentContext ctx = new TestParentContext())
    ctx.Database.Initialize(true);

1 个答案:

答案 0 :(得分:0)

web.config找到实体框架组并相应地更改/添加上下文

<entityFramework>
  <contexts>
    <context type="<libName>.<Context Name>, <Lib Name>">
      <databaseInitializer type="<Lib Name>.<Context Config>, <Lib Name>" />
    </context>
  </contexts>
....

<ContextName> TestChildContext <Context Config>TestInitializer TestParentContext可能已经为{{1}}提供了{{1}}可能不会删除/更改它。