无法生成显式迁移 - 具有多个上下文/配置的实体框架 6.1.3

Posted

技术标签:

【中文标题】无法生成显式迁移 - 具有多个上下文/配置的实体框架 6.1.3【英文标题】:Unable to generate an explicit migration - Entity Framework 6.1.3 with multiple Contexts / Configurations 【发布时间】:2016-09-15 09:53:34 【问题描述】:

我有一个作为内部工具集的项目。因此,我需要多个上下文。我有一个上下文设置很好,然后我开始尝试添加我的第二个上下文。我从另一个 SO question 中了解到,您需要在启用后重命名配置文件,然后在执行 Add-Migration 和 Update-Database 命令时引用新的配置文件名。我这样做并最终得到“无法生成显式迁移...”,它引用了 201605181623556_ServiceRequest,如下所示。

PM> Enable-Migrations -ContextTypeName InsideAdminContext

此时我重命名了配置文件InsideAdminConfiguration

PM> Enable-Migrations -ContextTypeName PartFinderContext

重命名配置文件PartFinderconfiguration

PM> Add-Migration "ServiceRequest" -ConfigurationTypeName InsideAdminConfiguration
PM> update-database -ConfigurationTypeName InsideAdminConfiguration
Applying explicit migrations: [201605181623556_ServiceRequest].
Applying explicit migration: 201605181623556_ServiceRequest.
Running Seed method.
PM> Add-Migration "InitialMigrationForPartFinder" -ConfigurationTypeName PartFinderConfiguration
Unable to generate an explicit migration because the following explicit migrations are pending: [201605181623556_ServiceRequest]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

到目前为止,我已经删除了所有的迁移文件夹,删除了表和_MigrationHistory表并使用上面的命令重新开始,但问题仍然存在。

-----更新----- 我颠倒了上面的顺序并首先创建了 PartFinder 表,并在尝试在 ServiceRequest 上添加迁移时遇到了同样的错误。

【问题讨论】:

【参考方案1】:

我在这里找到了解决方案:How do I enable EF migrations for multiple contexts to separate databases?

我缺少的部分是“bart s”的答案。配置文件需要有自己的命名空间,可以通过 Enable-Migrations -MigrationsDirectory 参数创建。在我的情况下,它转换为(我在这里有一些额外的参数,由于尝试了其他事情,可能没有必要):

Enable-Migrations -MigrationsDirectory "Migrations\InsideAdmin" -ContextTypeName InsideIIMAK.Domain.Concrete.InsideAdminContext -StartUpProjectName InsideAdmin

Enable-Migrations -MigrationsDirectory "Migrations\PartFinder" -ContextTypeName InsideIIMAK.Domain.Concrete.PartFinderContext -StartUpProjectName InsideAdmin

Add-Migration "InitialMigrationForPartFinder" -ConfigurationTypeName InsideIIMAK.Domain.Migrations.PartFinder.PartFinderConfiguration -StartUpProjectName InsideAdmin -ConnectionStringName PartFinderContext

update-database -ConfigurationTypeName InsideIIMAK.Domain.Migrations.PartFinder.PartFinderConfiguration -StartUpProjectName InsideAdmin -ConnectionStringName PartFinderContext

Add-Migration "ServiceRequest" -ConfigurationTypeName InsideIIMAK.Domain.Migrations.InsideAdmin.InsideAdminConfiguration -StartUpProjectName InsideAdmin -ConnectionStringName InsideAdminContext

update-database -ConfigurationTypeName InsideIIMAK.Domain.Migrations.InsideAdmin.InsideAdminConfiguration -StartUpProjectName InsideAdmin -ConnectionStringName InsideAdminContext

【讨论】:

以上是关于无法生成显式迁移 - 具有多个上下文/配置的实体框架 6.1.3的主要内容,如果未能解决你的问题,请参考以下文章

实体框架6代码首先用oracle更新实体

无法在类库中为实体框架启用迁移

多个上下文的实体框架迁移脚本故障转移现有的 __MigrationHistory 表

如何为多个数据库启用迁移,但只有一个上下文?

具有代码优先迁移的实体框架多个项目

实体框架数据库错误