EF Core 3.1 在特定数据库上下文上添加迁移

Posted

技术标签:

【中文标题】EF Core 3.1 在特定数据库上下文上添加迁移【英文标题】:EF Core 3.1 Add Migration on specific DB Context 【发布时间】:2020-10-05 00:26:09 【问题描述】:

我的 WebAPI 项目中有 2 个 EF Core DBContext。

一个是 OracleContext - Oracle.EntityFrameworkCore(2.19.70)。

OracleContext 是一个现有的数据库,我已经在其中创建了用于查询只读数据的存储库。

其次是 SQLServerContext - EFCore(3.1.5)

SQLServerContext 是一种代码优先的方法,用于编写应用程序的其余功能。

每当我尝试运行 Add-Migration InitialCreate -Context SQLServerContext -OutputDir Migrations\SqlServerMigrations 时都会出现错误:

类型中的方法“get_Info” 'Oracle.EntityFrameworkCore.Infrastructure.Internal.OracleOptionsExtension' 从程序集'Oracle.EntityFrameworkCore,版本= 2.0.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342' 没有 实施。

我相信 Add-Migration 也在尝试执行 OracleContext 但我希望 SQLServerContext 只生成迁移文件,我该如何实现?

[编辑] - 每个 DBContexts 都存在于自己的 dotnet 核心库类中。 - WebAPI 项目是启动项目。

【问题讨论】:

From here,这可能是由于 EfCore 3.0 中的重大更改以及后来无法与较旧的提供程序一起使用。您要么需要将 EfCore 降级到 2.x,要么尝试Oracle 3.19.0-beta1 在将 SQLServerContext 项目降级到 2.2.6 后,我想我几乎可以解决它了。现在我面临:Microsoft.EntityFrameworkCore.Design.OperationException:无法创建“SQLServerContext”类型的对象。有关设计时支持的不同模式,请参阅go.microsoft.com/fwlink/?linkid=851728 【参考方案1】:

您必须使用带有命名空间的完全限定名称,它也需要类名,但我认为在您的情况下,EF Core 正在选择其他上下文。

【讨论】:

我试过就像你说的那样使用 -Context ProjectName.Folder.SQLServerContext 但它没有用。我也尝试在上下文参数中输入拼写错误,但结果是一样的。【参考方案2】:

需要指定上下文。在终端中,切换到包含迁移文件夹的项目。使用下面的命令

dotnet ef migrations add --context YourApp.YourAppDbContext '<MigrationName>'

【讨论】:

【参考方案3】:

要在 Visual Studio 的 Asp.Net Core 3.1 中添加迁移,请使用以下代码:

Add-Migration yourMigrationName -Context youSpecificContextName

【讨论】:

以上是关于EF Core 3.1 在特定数据库上下文上添加迁移的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 3.1 (LINQ) - 如何在多列上左加入和分组

插值字符串上的 Ef Core vs Linq

EF Core 迁移从其他上下文添加表

EF Core 上下文不包含添加实体的更改

从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表

EF Core DB first - 我需要索引定义吗?