2012-08-25 27 views
7

我在VS 2012 RTM上使用EF 5.我在做Code First,但因为我刚刚开发而试图忽略代码迁移。为了避免它们,我有这个集合如何在不使用迁移的情况下使用LocalDB和EF

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

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

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

所以我决定彻底删除数据库。我进入VS,进入“SQL Server Object Explorer”,找到数据库并删除它。现在我被困在

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

我有这种情况发生,昨晚,我只是摆弄周围,直到它的工作(关下来的任务,重新启动VS,改变了DB和文件名在web.config等

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

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

+0

为什么不使用自动迁移?您可以随时更改数据库初始化方法,甚至可以在部署到生产时进行配置。 –

+0

[This](http://msdn.microsoft.com/zh-cn/data/jj554735)列出了一些我不想使用自动迁移的原因。而且,它只会让你变得如此之遥,直到你需要开始使用基于代码的迁移。 –

+0

我遇到了同样的问题,你找到了解决方案吗? – Shimmy

回答

5

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

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

那么很有可能你会得到,指出该数据库不包含任何模型元数据的错误消息。为了规避这一点,你的数据库初始化更改为:

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

现在运行的应用程序和数据库应该正确创建的表在那里。一旦这一步已经成功执行,你改变更改数据库初始化回:

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

感谢您的信息,这是有帮助的。 – Form

+1

真的很有帮助! –

6

的SQL Server对象资源管理器窗口可以保存到数据库的连接。关闭窗口及其打开的所有窗口将释放连接。

相关问题