【问题标题】:How to work with LocalDB and EF, without using migrations如何在不使用迁移的情况下使用 LocalDB 和 EF
【发布时间】:2012-08-20 13:27:17
【问题描述】:

我正在使用 EF 5 的 VS 2012 RTM。我正在执行 Code First,但由于我刚刚处于开发阶段,因此试图忽略代码迁移。为了避免他们,我有这个设置

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>());

有时,即使我认为我没有接触过模型,它也会决定重新创建。没关系。但通常会导致错误

无法删除数据库,因为它当前正在使用中。

所以我决定完全删除数据库。我进入 VS,进入“SQL Server 对象资源管理器”,找到数据库并将其删除。现在我被困在了

无法将文件“{0}”附加为数据库“{1}”

我昨晚发生了这种情况,我只是摆弄直到它起作用(关闭任务,重新启动 VS,更改 web.config 中的数据库和文件名等。

所以问题 1)我如何摆脱这种状态?

但更重要的问题是,我该如何防止自己进入这种状态?

【问题讨论】:

  • 为什么不使用自动迁移?您可以随时更改数据库初始化方法,甚至从部署到生产时的配置。
  • This 列出了我不想使用自动迁移的几个原因。此外,它只能让你到目前为止,直到你需要开始使用基于代码的迁移。
  • 我也遇到了同样的问题你找到解决办法了吗?

标签: ef-code-first asp.net-mvc-4 entity-framework-5 localdb


【解决方案1】:

SQL Server 对象资源管理器 窗口可以保持与数据库的连接。关闭窗口和从它打开的所有窗口都会释放连接。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题并设法解决了它。主要问题是 EF 不会自动创建数据库。解决方法并不难。

    首先,转到解决方案资源管理器并手动创建数据库。为此,请转到数据库所在的文件夹(通常为App_Data)。右键单击此文件夹并单击添加 -> 新项目。选择 数据 选项卡并选择 SQL Server 数据库。确保输入 Entity Framework 期望的名称(在 Cannot attach the file '{0}' as database '{1}' 错误消息中指定)。

    那么您很可能会收到一条错误消息,指出数据库不包含任何模型元数据。为了避免这种情况,请将您的数据库初始化更改为:

    Database.SetInitializer(new DropCreateDatabaseAlways<SomeContext>());
    

    现在运行应用程序,数据库应该已经正确创建了表。成功执行此步骤后,将数据库初始化程序更改回:

    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>());
    

    【讨论】:

    • 感谢您提供的信息,这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 2018-10-08
    • 1970-01-01
    • 2016-09-04
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    相关资源
    最近更新 更多