EF Designer连接字符串中providerName =“System.Data.EntityClient”的用途

时间:2013-09-23 02:35:52

标签: mysql .net entity-framework

我创建了一个实体框架设计器图,当我尝试生成数据库时,我不得不建立与受密码保护的MySql数据库的连接。我选择不将敏感连接数据包含在自动生成的字符串中,因此我在App.config中得到了一个没有密码的连接字符串:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DomainContainer" connectionString="metadata=res://*/Domain.csdl|res://*/Domain.ssdl|res://*/Domain.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;User Id=the_user;database=the_db&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

显然,如果我然后像这样实例化ObjectContext:

var dc = new DomainContainer();

我得到一个异常(“底层提供程序在Open上失败了。”),因为MySql需要身份验证。如果我从App.config中删除连接字符串,而是将实例化代码更改为:

var connectionString = string.Format("metadata=res://*/Domain.csdl|res://*/Domain.ssdl|res://*/Domain.msl;provider=MySql.Data.MySqlClient;provider connection string=\";server=localhost;User Id=the_user;Password={0};database=the_db\"", password);
var dc = new DomainContainer(connectionString);

然后ObjectContext能够连接并正确地将更改保存到数据库(我现在只尝试执行插入)。

我知道这不是通过代码提供连接字符串的推荐方法,而是应该使用连接字符串构建器。但是我想指出,在从App.config提供的连接字符串切换到提供的代码的过程中,providerName =“System.Data.EntityClient”信息丢失了,并且实体框架似乎仍在运行正确。 那么,那条信息在某种程度上是多余的吗?

更新(可能无关)

我重新启动MySQL安装程序,以仔细检查安装是否正常,并添加一个没有密码验证的新MySQL用户(顺便说一下,我没有给出这样的选项)。相反,MySQL安装程序安装了一个挂起的更新(MySQL for Visual Studio 1.0.2),这似乎已经损坏了我的安装:现在,几分钟前曾经正常工作的程序引发了一个前所未见的ArgumentException:

The specified store provider cannot be found in the configuration, or is not valid.

更新更新

看起来安装程序在我系统的不同目录中创建了相同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" />
    </DbProviderFactories>
  </system.data>

即使我仍然在Visual Studio的错误控制台中收到错误消息:

Errore  1   Errore 175: Il provider dell'archivio specificato non è stato trovato nella configurazione oppure non è valido. C:\Users\Dario\Documents\Programming\EFTest\EFTest\Domain.edmx  7   5   EFTest

这听起来与更新中提到的例外情况相同,但以我的语言进行了本地化。

0 个答案:

没有答案