You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.5.2+EF6配置MSSQL、MySQL双数据库报错如何解决?

报错根本原因

你使用的8.x版本MySql.Data与EF6的兼容性存在问题,8.x系列的MySQL驱动核心适配方向是EF Core,自带的配置类未继承EF6要求的System.Data.Entity.DbConfiguration,才会触发该报错,按以下步骤修改即可完成双数据库配置:


第一步:修正NuGet包引用
  • 卸载项目中现有的MySql.Data、MySql.Data.Entity.EF6包
  • 安装稳定兼容版本:MySql.Data.EntityFramework 6.10.9(该版本是官方最后一个针对.NET Framework 4.5.2 + EF6优化的稳定版,不会影响现有MSSQL的配置逻辑)
  • 保留原有的EF6相关包不变

第二步:修正app.config配置

替换原有对应节点内容,修正后的完整配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.10.9.0" newVersion="6.10.9.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <providers>
      <!-- 保留原有MSSQL驱动配置 -->
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <!-- 新增修正后的MySQL驱动配置 -->
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient"></remove>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
  </system.data>
  <!-- 新增两个数据库的连接字符串配置 -->
  <connectionStrings>
    <add name="MssqlDbContext" connectionString="你的MSSQL连接字符串" providerName="System.Data.SqlClient" />
    <add name="MysqlDbContext" connectionString="server=MySQL地址;port=3306;database=库名;uid=账号;pwd=密码;CharSet=utf8mb4;Allow User Variables=True" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
</configuration>

第三步:配置双数据库上下文

分别创建独立的上下文类避免配置冲突:

  • 原有MSSQL的上下文保持现有写法不变,无需修改
  • 新增MySQL专属上下文,写法如下:
using System.Data.Entity;
using MySql.Data.EntityFramework;

// 绑定MySQL专属EF配置
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MysqlDbContext : DbContext
{
    public MysqlDbContext() : base("name=MysqlDbContext")
    {
        // 不需要EF自动维护表结构的话可以加上这行
        Database.SetInitializer<MysqlDbContext>(null);
    }

    // 配置MySQL表对应的实体集合
    public DbSet<你的实体类> 对应属性名 { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        // 可选:统一将表名映射为小写,避免MySQL大小写敏感导致的表找不到问题
        modelBuilder.Types().Configure(c => c.ToTable(c.ClrType.Name.ToLower()));
    }
}

第四步:验证配置

分别实例化两个上下文执行简单的读写测试,确认两个数据库都可以正常操作即可。

内容的提问来源于stack exchange,提问作者Steven Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:54:03