C# EntityFramework 6.0 CreateDatabaseIfNoteExists代码首先创建数据库

C# EntityFramework 6.0 CreateDatabaseIfNoteExists代码首先创建数据库,c#,entity-framework,powershell,C#,Entity Framework,Powershell,我做错了什么。当我最初使用powershell创建代码时,我已经有了一个用户DbContext设置,并且工作正常 我在应用程序启动时按预期实现了数据库初始值设定项 Database.SetInitializer<UserDbContext>(new CreateDatabaseIfNotExists<UserDbContext>()); 我已经在PackageManager控制台上尝试了相同的方法,但它仍然会给我相同的消息 编辑: 在新的错误消息中,问题来自于您启用了迁

我做错了什么。当我最初使用powershell创建代码时,我已经有了一个用户DbContext设置,并且工作正常

我在应用程序启动时按预期实现了数据库初始值设定项

Database.SetInitializer<UserDbContext>(new CreateDatabaseIfNotExists<UserDbContext>());
我已经在PackageManager控制台上尝试了相同的方法,但它仍然会给我相同的消息

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


您需要对数据库进行调用,以读取或插入最初创建的数据库的数据。您使用的代码仅告诉EF如何处理数据库(如果数据库在尝试查找时不存在)。对我来说,我使用了在

中概述的方法,最终找到了解决方案,但不确定为什么或什么。将我的数据库初始值设定项更改为MigrateDatabaseToLatestVersion,而不是CreateDatabaseIfNotExists

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

感谢您的回复。我已经试过了,但仍然不起作用。奇怪的是,它对我起作用了,看看这篇关于初始化数据库的不同方法的文章,了解更多想法:嗨,Eagle,我一直在关注你,几乎已经得到了相应的一切。您提到的我使用的是自动迁移,迁移历史记录保存在数据库中,对吗?还是我错过了这张照片的一大块。从理论上讲,如果数据库启用了自动迁移并启用了DB初始化规则,则删除该数据库时应重新创建该数据库。仍然不走运……迁移日期存储在数据库的特殊表中,因此当自动迁移运行时,它会从该特殊表中查找DB规范,并将其与新的dbcontext架构进行比较,并应用任何更改。由于缺少该表,因此无法与之进行比较,并且由于希望数据库存在而失败。您需要做的是手动运行迁移0(读取生成和运行迁移部分@)或禁用然后重新启动迁移我在创建数据库时面临同样的问题。你把那条线放在哪里了?Configuration.cs文件
公共配置()
?因为这就是我放置它的地方,每次运行
updatedatabase
命令时,它都会与2013年相比崩溃。很高兴收到您的来信。@Yustme,这个主题已经很老了,但是为了记录在案,您在
上下文
构造函数中配置了
初始值设定项。
Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>());