【问题标题】:How to disable code-first feature in EF (MVC4 Visual Studio 2012)如何在 EF (MVC4 Visual Studio 2012) 中禁用代码优先功能
【发布时间】:2013-01-17 17:31:27
【问题描述】:

如何在 EF (Visual Studio 2012) 中禁用代码优先功能

我正在使用 Visual Studio 2012,MVC4(Internet 应用程序模板)。

我想使用 EF,但不想使用它的代码优先功能。我希望应用程序出错,而不是根据我的代码创建或修改我的数据库。 (我无法忍受这种我的数据库在幕后被更改的感觉......我希望应用程序使用我创建的确切数据库......如果有任何需要更改的东西,我会我自己做)

新的 Ef (VS2012) 可以做到这一点吗?

我看到很多人问这个问题,但到目前为止我找不到答案。

【问题讨论】:

    标签: entity-framework asp.net-mvc-4 visual-studio-2012 ef-code-first


    【解决方案1】:

    您可以使用 Code First 并通过将数据库初始化程序设置为 null 来确保您的数据库在更改模型时永远不会被更新或覆盖:

    Database.SetInitializer<MyDbContext>(null);
    

    它是Database 类的静态方法,应在应用程序开始时调用,例如在 global.asax 或上下文类的静态构造函数中。为此,您必须手动更改模型类和数据库架构以使其匹配。

    您还可以使用逆向工程师功能从现有数据库创建 Code First 模型。这里解释一下:http://msdn.microsoft.com/en-us/data/jj200620

    或者,如果您根本不想使用 Code First 并与模型设计人员合作,您可以使用 Database First 方法,此处解释:http://msdn.microsoft.com/en-us/data/jj206878

    这里有关于所有可能选项的概述:http://msdn.microsoft.com/en-us/data/ee712907.aspx

    【讨论】:

    • 谢谢!我正在疯狂地浏览现有的解决方案,试图找出 Code First 不起作用的原因。在这篇文章之后,我在 global.asax.cs -> Database.SetInitializer(null); 中找到了这段代码
    • 所以这是我不明白的:在我的控制器中,我有一个包含上下文的私有字段。该字段通过包含上述行的无参数构造函数进行初始化。接下来,我被路由到一个控制器方法,该方法在 EF 尝试删除数据库时崩溃。怎么会这样?是否与我调用 Context 的超级构造函数有关,将我的 Context 类的名称作为字符串参数。
    猜你喜欢
    • 1970-01-01
    • 2014-03-28
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多