首页 > 解决方案 > 通过 PMC for mysql 添加 ef 核心迁移时如何修复错误?

问题描述

我想从使用 SQL Server 切换到 MySql。我已经为 SQL Server 创建了迁移并将它们应用于数据库。我已经添加了 Pomelo Mysql 包,现在想为 MySql 数据库创建迁移。我的问题是尝试使用 add-migration 命令时在包管理器控制台中收到错误消息。

启动/配置服务

services.AddDbContext<ApplicationDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection"), 
                mySqlOptions => { mySqlOptions.ServerVersion(new Version(8, 0, 16), ServerType.MySql); }));

csproj

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" PrivateAssets="All" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
  </ItemGroup>

ApplicationDbContext 类

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseMySql("Server=localhost;Database=myDbUid=myUserId;");
}

尝试添加迁移时收到以下错误。“已添加具有相同键的项目。键:Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal.MySqlOptionsExtension” 此错误是否与我以前迁移过 MS SQL Server 的事实有关?任何帮助将非常感激。

标签: c#entity-framework-migrationsef-core-2.2.net-core-2.2package-manager-console

解决方案


我遇到了同样的问题。对我来说,答案是从我的 Context 类中删除该方法。OnConfiguring()

我有两个项目——一个包含 DB 代码和迁移,另一个是用于查看数据的 ASP.NET Core Web 项目。

我的 Web 项目的 Startup.cs 中有以下内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddDbContext<EFCoreExampleContext>(o => o.UseMySql("server=etc..."));
}

在我的数据库项目中,我在 DbContext 派生类中有这个:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseMySql("server=etc...");
}

即使我使用的是Update-Database -Project MyDbProj,它也在使用另一个项目中的连接字符串。如果我AddDbContext从 Startup.cs 中删除该行,我就会得到一个不同的错误。删除该OnConfiguring方法是使其工作的唯一方法。


推荐阅读