我正在使用EF 5进行VS 2012 RTM。我正在执行Code First,但是因为我刚刚开发,所以试图忽略代码迁移。为了避免它们,我有这套
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>());
偶尔,即使我不认为我触及了模型,它也决定重新创建。没关系。但它通常会导致错误
无法删除数据库,因为它当前正在使用中。
所以我决定完全删除数据库。我进入VS,转到“SQL Server对象资源管理器”,找到数据库并删除它。现在我被困在
无法将文件“{0}”附加为数据库“{1}”
我昨晚发生这种情况,我只是摆弄它直到它工作(关闭任务,重新启动VS,更改了web.config中的数据库和文件名等。
问题1)我如何摆脱这种状态?
但更重要的问题是,如何防止自己进入这种状态?
答案 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>());