7

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

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

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

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

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

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

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

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

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

4

2 回答 2

6

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

于 2013-02-01T04:52:16.443 回答
5

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

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

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

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

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

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>());
于 2012-12-04T08:43:00.843 回答