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

时间:2013-10-23 15:40:36

标签: c# entity-framework powershell

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

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

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.

我在Package Manager控制台中尝试过相同的操作,它仍然给我相同的消息。

2 个答案:

答案 0 :(得分:14)

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

Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>());

答案 1 :(得分:2)

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

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

中列出的方法