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

使用C#和Entity Framework连接MySQL遇metadata及CodeFirst异常问题

解决MySQL EF连接的metadata错误与CodeFirst异常问题

我是C#新手,接手他人代码时,用8.0.32版本的MySql.Data和MySql.Data.EntityFramework连接MySQL数据库,遇到了两个棘手问题:

  • 配置带metadata的连接字符串时,运行报错“option not supported 'metadata'”
  • 移除metadata后,又抛出Entity Framework UnintentionalCodeFirstException异常,即使指定edmx路径的metadata也无法解决

数据库连接权限正常,其他软件能正常连接,相关配置和代码如下:

原连接字符串

<add name="defaultDb" connectionString="metadata=res://*/VitoriasModel.csdl|res://*/VitoriasModel.ssdl|res://*/VitoriasModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;SERVER=remoteconnection(I cant put the server number here);DATABASE=dbname;UID=username;PASSWORD=password &quot;" providerName="MySql.Data.MySqlClient" />

移除metadata后的连接字符串

<add name="defaultDb" connectionString="SERVER=remoteconnection(I cant put the server number here);DATABASE=dbname;UID=username;PASSWORD=password;" providerName="MySql.Data.MySqlClient" />

DbContext代码

public partial class vitoriasExample : DbContext
{
    public vitoriasExample()
        : base("name=defaultDb")
    {}
}

解决方案

  1. 修正连接字符串的ProviderName
    带metadata的连接字符串是EF6模型优先/数据库优先模式的专用格式,原配置里providerName设为MySql.Data.MySqlClient是错误的,应该改为System.Data.EntityClient。同时确保metadata路径正确,如果edmx有命名空间,要替换res://*/为完整命名空间路径,比如res://*/YourProject.Models.VitoriasModel.csdl。修正后的连接字符串示例:

    <add name="defaultDb" 
         connectionString="metadata=res://*/VitoriasModel.csdl|res://*/VitoriasModel.ssdl|res://*/VitoriasModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;SERVER=你的服务器地址;DATABASE=dbname;UID=username;PASSWORD=password;SslMode=Required&quot;" 
         providerName="System.Data.EntityClient" />
    
  2. 确保EF版本与驱动兼容
    MySql.Data.EntityFramework 8.0.x适配的是EF6,不是EF Core。检查项目是否安装了6.x版本的EntityFramework NuGet包,且DbContext继承的是System.Data.Entity.DbContext。

  3. 验证EDMX文件配置

    • 确认项目中存在VitoriasModel.edmx文件,右键该文件→属性→将“生成操作”设为“嵌入的资源”,确保元数据文件被正确嵌入程序集。
    • 检查DbContext构造函数中的连接字符串名称defaultDb,是否与配置文件中的name属性完全一致。
  4. 添加SSL连接参数
    新版本MySQL驱动默认要求SSL连接,在连接字符串的provider部分加上SslMode=Required,避免连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:32:41