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

标签 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 连接器。

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

我找不到更好的标题来回答这个问题。


微软 Visual Studio

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

捕获到的内部异常属于“System.FormatException”类型,并带有此错误消息:“输入字符串的格式不正确。”。

确定


解决方案

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

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

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

  4. (ProviderManifest.cs:73) 具有:双版本 = double.Parse(manifestToken, System.Globalization.CultureInfo.InvariantCulture);

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

  6. 在 MySql.Data 项目的 AssemblyInfo.cs 中的 AssemblyVersion 添加 .1,此 1 文件与其余文件共享:[assembly: AssemblyVersion("6.4.3.1")]

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

  8. 以管理员身份使用 gacutil 安装它们。 在这里您还可以获得公钥 token 。

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

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

<!-- 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" />

最佳答案

连接字符串不包含提供程序程序集的路径。连接字符串的 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。

关于c# - 如何为包含数据库连接器的程序集设置绝对路径?带有 Entity Framework 4.1 的 MySQL 连接器 6.4.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899617/

相关文章:

c# - 使用链接文件的 App 或 Web Config 中的 AppSettings

c# - 使用在 Linux 上运行的 .Net 2.2 核心读取文件共享上的文件内容

c# - MVC : Pagination hindering the way a list is sorted

c# - 具有对象类型支持的 .Net 第三方 Oracle 提供程序

c# - Dapper 提供者依赖参数 token

c# - 编辑项目列表 c#

c# - 是否可以在 C# 中设置 UdpClient ReceiveBufferSize 属性?

mysql - CREATE TABLE 自动附加默认列?

php - 如何将查询mysql转换为laravel查询

php - 如何删除此 php 脚本中 undefined index