MySQL连接器6.7.4和Entity Framework 5异常

Dan*_*ker 8 .net c# mysql entity-framework

为Visual Studio 1.0.2下载了MySQL Connector/Net 6.7.4MySQL,然后按照这些说明进行测试:

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

运行应用程序,我得到了这个例外:

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

然后我将对6.7.4.0 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的版本.

如何让它正常工作?

Dan*_*ker 14

解决这个问题的诀窍是:

  1. 加入引用MySql.DataMySql.Data.Entity库的正确版本(6.7.4.0对于.NET 4.5,在我的情况)到项目中.
  2. 编辑machine.config您的编辑器以管理员身份运行,并取代的MySQL版本所有出现6.6.5.06.7.4.0.

对于第二步,请注意有多个machine.config文件,每个框架版本(3.0,3.5,4.0)和架构(32位,64位).另请注意,machine.config.NET 4.5 的文件位于.NET 4.0文件夹中.您可以machine.config在以下位置找到文件:

C:\ WINDOWS\Microsoft.NET \框架\\配置

和:

C:\ WINDOWS\Microsoft.NET\Framework64 \\配置

如果machine.config文件中没有对MySQL的引用,则可能没有为Visual Studio安装MySQL.要么这样做,要么将以下内容添加到app.config项目的文件中:

<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>
Run Code Online (Sandbox Code Playgroud)

但请注意,当您同时安装上述代码段MySQL for Visual Studio 并将其添加到app.config文件中时,您将收到以下异常:

ConfigurationErrorsException:列'InvariantName'被约束为唯一.值'MySql.Data.MySqlClient'已存在.


Der*_*ter 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>
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)

特别注意这一<remove name="MySQL Data Provider" />行.

  • @rgettman它在添加新数据之前删除了MySQL数据提供程序的现有配置,因此没有关于重复条目的投诉. (2认同)