【问题标题】: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 将在您第一次运行查询、将实体添加或附加到上下文等时调用。

    【讨论】:

    • 太棒了,正是我想要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2021-04-16
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多