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

EF Core MySQL Scaffold报错:给定键‘3072’不在字典中求解决方案

解决EF Core Scaffold MySQL时出现的KeyNotFoundException(Key '3072')

问题场景

执行EF Core Scaffold命令生成MySQL数据库模型:

dotnet ef dbcontext scaffold "server=example.com;port=3306;user=admin;password=xxxxxxxx;database=abc_db;CharSet=utf8" MySql.EntityFrameworkCore -o Models -f

抛出如下错误:

System.Collections.Generic.KeyNotFoundException: The given key '3072' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at MySql.Data.MySqlClient.MySqlField.SetFieldEncoding()
   at MySql.Data.MySqlClient.MySqlField.set_CharacterSetIndex(Int32 value)
   at MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField field)
   at MySql.Data.MySqlClient.NativeDriver.GetColumnsData(MySqlField[] columns)
   at MySql.Data.MySqlClient.Driver.GetColumns(Int32 count)
   at MySql.Data.MySqlClient.ResultSet.LoadColumns(Int32 numCols)
   at MySql.Data.MySqlClient.ResultSet..ctor(Driver d, Int32 statementId, Int32 numCols)
   at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlDataReader.Close()
   at MySql.Data.MySqlClient.MySqlCommand.ResetReader()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteScalar()

环境信息:MySQL 8.0.35(Linux x86_64,支持TLSv1.2/TLSv1.3),已尝试将连接字符串字符集改为utf8mb4,问题未解决。

解决方案

1. 升级MySQL驱动包版本

错误中的Key '3072'对应MySQL 8.0引入的utf8mb4_0900_ai_ci排序规则,旧版本的MySQL驱动(MySql.EntityFrameworkCore/MySql.Data)未添加该字符集的映射,导致字典查找失败。

  • 查看当前项目中MySQL相关包版本:
    dotnet list package
    
  • 升级到与MySQL服务器版本匹配的驱动包(推荐8.0.35版本,与服务器版本一致):
    dotnet add package MySql.EntityFrameworkCore --version 8.0.35
    

2. 连接字符串中指定兼容的排序规则

如果升级驱动后仍有问题,可在连接字符串中显式指定驱动支持的排序规则(如utf8mb4_general_ci):

server=example.com;port=3306;user=admin;password=xxxxxxxx;database=abc_db;CharSet=utf8mb4;Collation=utf8mb4_general_ci

3. 临时修改数据库表的排序规则(可选)

若无法升级驱动,可临时将数据库中使用utf8mb4_0900_ai_ci排序规则的表/字段改为utf8mb4_general_ci,执行Scaffold命令生成模型后再改回原规则。

执行修改排序规则的SQL示例:

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

内容的提问来源于stack exchange,提问作者Da Do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:43:31