【问题标题】:Entity Framework 6 and MySQL, model firstEntity Framework 6 和 MySQL,模型优先
【发布时间】:2025-12-15 23:55:01
【问题描述】:

我在 MySQL 中使用 Entity Framework 6 并在 ASP 中使用 model/database-first 技术时遇到问题。 NET C# MVC 3.

目前的情况是我收到了错误:

Keyword not supported.
Parameter name: metadata

元数据在 web.config –file 的连接字符串中指定:

<add name="SiteNameContainer" 
  connectionString="metadata=res://*/Models. SiteName.csdl|
    res://*/Models. SiteName.ssdl|
    res://*/Models. SiteName.msl;
    provider=MySql.Data.MySqlClient;
    provider connection string='server=127.0.0.1;
    user id=fire;password=fire_db;
    database=fire_dotnet'" 
  providerName="MySql.Data.MySqlClient" />

我试图删除connectionString中的元数据部分,但是它说不支持关键字“provider”,然后不支持“provider connection string”。

我的 web.config 文件中也有这两个部分:

<entityFramework>
    <providers>
        <provider invariantName="MySql.Data.MySqlClient" 
            type="MySql.Data.MySqlClient.MySqlProviderServices, 
            MySql.Data.Entity.EF6, Version=6.8.3.0, 
            Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </providers>
</entityFramework>
<system.data>
<DbProviderFactories>
    <clear />
    <remove invariant="MySql.Data.MySqlClient" />
    <add name="MySql.Data.MySqlClient" 
        invariant="MySql.Data.MySqlClient" 
        description=".Net Framework Data Provider for MySQL" 
        type="MySql.Data.MySqlClient.MySqlClientFactory, 
        MySql.Data, Version=6.8.3.0, Culture=neutral, 
        PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>

我引用了 MySQL Net-connector 6.8.3 文件(MySql.Data、MySql.Data.Entity.EF6、MySql.Web)。

我的要求是我必须使用 MySQLEntity Framework 6,并且 .NET 连接器的更改日志显示 6.8.x 增加了对 MySQL 的支持。

我没有想法,希望有人可以帮助我。提前致谢。

【问题讨论】:

  • 你看过dev.mysql.com/doc/refman/5.0/en/…了吗?那里的示例 app.config 与您发布的内容有很大不同。全面披露:我从未将 EF 与 MySQL 一起使用。
  • 是的,但是我首先使用模型,所以我需要元数据映射
  • 出于好奇,你用的是哪个VS?

标签: c# mysql asp.net asp.net-mvc-3 entity-framework


【解决方案1】:

您的连接字符串中似乎使用了错误的 providerName,它应该是 System.Data.EntityClient

这是我最终如何让我的模型优先代码与 MySQL 一起使用以及我的 app.config 的样子:

<connectionStrings>
  <add name="MyEntities"
       connectionString="metadata=res://*/Data.Entity.Model.csdl|res://*/Data.Entity.Model.ssdl|res://*/Data.Entity.Model.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;Data Source=localhost;User Id=dbadmin;Password=password;Initial Catalog=database_name;&quot;"
       providerName="System.Data.EntityClient"/>
</connectionStrings>

如果这不起作用,这里是 entityFramework 部分。您会注意到我在下一节中使用的 codeConfigurationType 属性。它为 MySQL 添加了依赖解析器,但还有其他方法可以在 MySQL: EF 6 Support 文档中阅读。

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
  <providers>
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
  </providers>
</entityFramework>

【讨论】:

  • 啊哈!只有一行为我修复了它&lt;provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/&gt; 谢谢!