如何在不使用迁移的情况下使用LocalDB和EF

时间:2012-08-25 02:07:00

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

我正在使用EF 5进行VS 2012 RTM。我正在执行Code First,但是因为我刚刚开发,所以试图忽略代码迁移。为了避免它们,我有这套

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

偶尔,即使我不认为我触及了模型,它也决定重新创建。没关系。但它通常会导致错误

  

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

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

  

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

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

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

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

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

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

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

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