EntityFramework 6.0 CreateDatabaseIfNotExists代码首先创建数据库

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

我在应用程序启动时按预期实现了Database Initializer。

Database.SetInitializer(new CreateDatabaseIfNotExists()); 

只是为了测试它是否真的创建了数据库我实际上删除了数据库,现在我被困住了数据库将不会被创建。 我正在使用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. 

我从包管理器控制台尝试了相同的操作,它仍然给我相同的消息。

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

 Database.SetInitializer(new MigrateDatabaseToLatestVersion()); 

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

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