【问题标题】:Why does Entity Framework not recreate my localdb when deleted?为什么实体框架在删除时不重新创建我的 localdb?
【发布时间】:2014-02-24 19:58:40
【问题描述】:

使用 Entity Framework 6 使用模型优先设置

  • 未指定连接字符串。
  • 模型的简单单类 POCO。

运行应用程序, 创建的数据库。哇!

删除 App_Data 文件夹中的 .mdf/.ldf。

运行应用程序, 数据库连接错误。

为什么不重新创建数据库?

附:尝试做How to re-create database for Entity Framework?,但它不起作用。

那么我如何说服 EF 重新创建数据库(为什么这很难?)?

【问题讨论】:

  • 请添加您得到的错误的全文。
  • 你有没有试过这些? Database.SetInitializer(new MigrateDatabaseToLatestVersion());或 Database.SetInitializer(new CreateDatabaseIfNotExists());
  • 您是否在上下文配置中将disableDatabaseInitialization 设置为false
  • 看来你没在看。从您所写的内容看来,一旦创建了数据库Run application, database created. Woot!,您就从未真正从 SQL Server 中删除它。所以我要做的就是去 SQL Server Management Studio 并自己删除它,或者按照TarzanJerry 的建议尝试Initializers 之一。在我看来,DropCreateDatabase 是您在这种情况下所要寻找的。​​span>

标签: c# entity-framework localdb


【解决方案1】:

您可能在 Windows 资源管理器中删除了 MDF 文件。 SQL Server LocalDb 对此一无所知,错误可能是抱怨无法找到 MDF 文件。

要正确删除它,您可以从 SQL Server Management Studio 或 Visual Studio 中的 SQL Server 对象资源管理器中删除数据库。

或者,您可以在 Visual Studio 解决方案资源管理器中选择“显示所有文件”,在 App_Data 中找到 MDF 文件,右键单击以将其从解决方案资源管理器本身中删除。 Visual Studio 似乎做了正确的事,并让 SQL Server 知道了这一变化。

【讨论】:

  • 是的,从 Windows 资源管理器中删除了它。 +1 用于从 VS 中删除。两个很好的答案。无法决定将哪一个标记为答案。
  • 好的,向安东尼点头。关于 VS SQL Server 对象资源管理器的重要提示。
  • 这些是非常不同的答案。标记解决您的问题的那个。如果是这里的删除问题,您可能不必添加初始化程序,因为 EF 默认使用 CreateDatabaseIfNotExists 初始化程序。
【解决方案2】:

在您的 DbContext 类构造函数中,您可以使用以下值之一来指定运行应用时要执行的操作:

        Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());
        Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());
        Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());

尝试在您的 DbContext 类中使用这些初始化程序之一。

【讨论】:

  • 有道理。两个很好的答案。无法决定将哪一个标记为答案。
  • 我发现其他解决方案并非每次都有效(不知道为什么),但使用 CreateDatabaseIfNotExists 初始化程序可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多