【问题标题】:Recreate and Seed database outside of MVC project在 MVC 项目之外重新创建和播种数据库
【发布时间】:2011-12-07 13:59:58
【问题描述】:
我正在为我的服务层、POCO 和存储库层创建一个带有单独类库的代码优先 MVC 应用程序。在存储库层中,我有我的 IRepository 类的 EF 实现、一个 DbContext 和对实体框架的所需引用。我的 MVC 项目没有引用 EF。
有没有办法设置我的解决方案,以便在模型更改后重新创建和播种数据库?到目前为止,我看到的所有示例都在 MVC 项目的 Global.asax 文件中对其进行了初始化,但我的 MVC 项目独立于 EF 并且无法访问 DbContext。
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-3
entity-framework
ef-code-first
【解决方案1】:
您可以在上下文的静态构造函数中注册初始化程序:
public class MyContext : DbContext
{
static MyContext()
{
Database.SetInitializer(new MyInitializer());
}
//...
}
使用您的 Repository 实现库中的派生初始化程序:
public class MyInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
protected override void Seed(MyContext context)
{
// ...
}
}
静态构造函数将在您创建第一个上下文实例时执行,Seed 将在您第一次运行查询、将实体添加或附加到上下文等时调用。