MySQL连接器6.7.4和Entity Framework 5异常

时间:2013-09-18 20:57:21

标签: c# mysql .net entity-framework

我已下载MySQL Connector/Net 6.7.4MySQL for Visual Studio 1.0.2,然后按these instructions进行测试:

  1. 创建与现有MySQL数据库的连接。
  2. 创建控制台应用程序。
  3. 从现有数据库连接添加 ADO.NET实体数据模型
  4. 添加代码生成项 EF 5.x DbContext Generator ,替换.tt文件。
  5. 编写一些从数据库中检索记录的代码。
  6. 运行应用程序,我遇到了这个例外:

      

    ConfigurationErrorsException :无法找到或加载已注册的.Net Framework数据提供程序。

    然后我将MySql.DataMySql.Data.Entity库版本6.7.4.0的引用添加到我的.NET 4.5项目中。现在,当我运行应用程序时,我得到了一个不同的例外:

      

    FileLoadException :无法加载文件或程序集“MySql.Data,Version = 6.6.5.0,culture = neutral,PublicKeyToken = c5687fc88969c44d”或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

    请注意版本号,它不是我安装的MySQL Connector的版本。

    如何让它正常工作?

5 个答案:

答案 0 :(得分:14)

解决这个问题的诀窍是:

  1. 向项目添加对正确版本的MySql.DataMySql.Data.Entity库(对于.NET 4.5为6.7.4.0)的引用。
  2. 编辑machine.config,编辑器以管理员身份运行,并将所有出现的6.6.5.0版本6.7.4.0替换为machine.config
  3. 对于第二步,请注意有多个machine.config个文件,每个框架版本一个(3.0,3.5,4.0)和架构(32位,64位)。另请注意,.NET 4.5的machine.config文件位于.NET 4.0文件夹中。您可以在以下位置找到machine.config文件:

      

    C:\的Windows \ Microsoft.NET \框架\\配置

      

    C:\的Windows \ Microsoft.NET \ Framework64 \\配置

    如果app.config文件中没有对MySQL的引用,则可能未安装MySQL for Visual Studio。要么这样做,要么将以下内容添加到项目的<system.data> <DbProviderFactories> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </system.data> 文件中:

    MySQL for Visual Studio

    但请注意,当您同时安装app.config 时,请将上述代码段添加到{{1}}文件中,然后您将获得此例外:

      

    ConfigurationErrorsException :列'InvariantName'被限制为唯一。值'MySql.Data.MySqlClient'已存在。

答案 1 :(得分:6)

我不喜欢编辑machine.config。只需将此重定向添加到web.config:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.7.4.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

答案 2 :(得分:5)

使用它应该可以阻止Virtlink提到的例外情况:

<system.data>
    <DbProviderFactories>
        <remove name="MySQL Data Provider" />
        <add name="MySQL Data Provider"
            invariant="MySql.Data.MySqlClient"
            description=".Net Framework Data Provider for MySQL"
            type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

特别注意<remove name="MySQL Data Provider" />行。

答案 3 :(得分:1)

HERE下载MYSQL 6.7.4.0。请注意,您的特定问题需要6.7.4.0而不是其他版本!

直接链接是this

下载文件并将其添加到解决方案的参考文件夹中。

这可能会解决你的问题(它对我有用,是的,我知道这可能是一个非常恼人的问题)。

祝你好运:)

答案 4 :(得分:0)

我意识到这个帖子在2013年得到了答案,但我刚刚遇到了这个问题。在我的情况下,我最近安装了Windows 10周年更新。在此之前没有问题。

根据上面的答案,事实证明我的Machine.config文件已被覆盖(我假设更新)。

对我来说,一旦我将MySql程序集信息恢复到Machine.config文件,它立即重新开始工作。

特别是“运行时”和“DbProviderFactories”部分已被擦除,必须更换。它们如下(这些将根据您使用的程序集的版本而有所不同):

运行时段:

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
       <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
       <bindingRedirect oldVersion="6.7.4.0" newVersion="6.9.9.0" />
   </dependentAssembly>
   <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
       <assemblyIdentity name="MySql.Data.Entity" publicKeyToken="c5687fc88969c44d" culture="neutral" />
       <bindingRedirect oldVersion="6.7.4.0" newVersion="6.9.9.0" />
   </dependentAssembly>
   <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
       <assemblyIdentity name="MySql.Web" publicKeyToken="c5687fc88969c44d" culture="neutral" />
       <bindingRedirect oldVersion="6.7.4.0" newVersion="6.9.9.0" />
   </dependentAssembly>
   </assemblyBinding>
</runtime>

DbProviderFactories部分

<DbProviderFactories>
       <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>

希望这有助于其他人遇到同样的问题。