11

我究竟做错了什么。当我最初使用 powershell 创建 Code-First 时,我有一个用户 DbContext 设置和工作,它一切正常。

我在应用程序启动时按预期实现了数据库初始化程序。

Database.SetInitializer<UserDbContext>(new CreateDatabaseIfNotExists<UserDbContext>());

只是为了测试它是否真的创建了数据库,我实际上删除了数据库,现在我被卡住了,不会创建数据库。我正在使用 SQL Server 2012,不知道可能出了什么问题。

我收到的错误消息是

System.InvalidOperationException: Migrations is enabled for context 'UserDbContext' but the database does not exist or contains no mapped tables. Use Migrations to create the database and its tables, for example by running the 'Update-Database' command from the Package Manager Console.

我已经从包管理器控制台尝试过同样的方法,它仍然给我同样的信息。

4

2 回答 2

14

终于想出了解决方案,不知道为什么或什么。将我的数据库初始化程序更改为 MigrateDatabaseToLatestVersion 而不是 CreateDatabaseIfNotExists 工作。

Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>());
于 2013-10-23T17:07:52.647 回答
2

编辑:使用您的新错误消息,问题来自您启用了迁移并且已经运行了迁移(可能是第一次创建数据库),并且由于您删除了数据库,迁移历史记录已经丢失。如果您不使用自动迁移,则您无法自行更改数据库并期望代码优先了解它。尝试禁用迁移并重新启用它们,看看是否会清除迁移历史记录。

您将需要调用数据库作为最初创建数据库的读取或插入数据。您使用的代码仅告诉 EF 在尝试查找数据库时如何处理如果数据库不存在。对我来说,我使用http://www.codeproject.com/Tips/411288/Ensure-Your-Code-First-DB-is-Always-Initialized中概述的方法

于 2013-10-23T15:44:00.397 回答