如何设置包含数据库连接器的程序集的绝对路径?带有Entity Framework 4.1的MySQL Connector 6.4.3

时间:2011-08-01 14:07:18

标签: c# mysql ado.net entity-framework-4.1 mysql-connector

原因:http://bugs.mysql.com/bug.php?id=61933

我从源代码重新编译了连接器,将一个版本的版本增加到6.4.3.1,但现在这个(可能)微不足道的问题阻止了我。

如何在app.config中的连接字符串中设置完整的提供程序名称?我安装了官方的6.4.3连接器。

我得到的错误是我添加新的实体数据模型,并从现有数据库中选择。我追溯到上面的链接(愚蠢)bug。

我无法为这个问题找到更好的标题。


Microsoft Visual Studio

连接数据库时发生错误。数据库可能不可用。发生了'System.Data.ProviderIncompatibleException'类型的异常。错误消息是:'提供程序未返回ProviderManifestToken字符串。

捕获的内部异常是'System.FormatException'类型,此错误消息:'输入字符串格式不正确。'。'。

确定


解决方案

  1. 下载MySQL Connector / 6.4.3源代码并解压缩。

  2. 在MySql.Data.Entity项目中,替换...:

  3. (ProviderServices.cs:188)with:double version = double.Parse(connection.ServerVersion.Substring(0,3),System.Globalization.CultureInfo.InvariantCulture);

  4. (ProviderManifest.cs:73)with:double version = double.Parse(manifestToken,System.Globalization.CultureInfo.InvariantCulture);

  5. 创建一个新的签名密钥,并将其命名为ConnectorNet(与assemblyinfo.cs中的名称相同)

  6. 将.1添加到MySql.Data项目的AssemblyInfo.cs中的AssemblyVersion中,这1个文件与其余文件共享:[assembly:AssemblyVersion(“6.4.3.1”)]

  7. 将Release作为目标配置,您也可以禁用.Tests项目的构建。

  8. 作为管理员,使用gacutil安装它们。 您还可以获得公钥令牌。

  9. 找到Machine.config请注意,了解编译要使用的项目的.NET fx非常重要。

  10. 搜索DbProviderFactories,并注释掉现有的MySQL数据提供程序,通过在版本和公钥标记中添加.1来复制并替换重复条目。

  11. <!-- 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.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" / -->
    
    <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.4.3.1, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXX" />
    

2 个答案:

答案 0 :(得分:1)

连接字符串不包含提供程序程序集的路径。连接字符串的providerName仅引用system.data\DbProviderFactories中注册的提供程序:

<system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <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.4.3.1, Culture=neutral, PublicKeyToken=YourToken" />
</system.data>

工厂注册中的invariant是您在连接字符串providerName中引用的内容。您可以尝试将新的连接器组件放到应用程序目录中,或强烈命名组件,将其安装到GAC。

答案 1 :(得分:0)

更简单的解决方案:使用官方的6.4.3安装程序。

进入您的区域设置,将小数点分隔符从“,”更改为“。” etvoilà。

等待6.4.4发货时已经足够了。