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) - 如何在多列上左加入和分组