我正在尝试创建一个可以在我的所有项目中使用的通用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);
答案 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}}可能不会删除/更改它。