【问题标题】:Entity Framework: "ProviderName" in connection string required- all of the sudden?实体框架:突然需要连接字符串中的“ProviderName”?
【发布时间】:2013-09-08 07:33:53
【问题描述】:

我们已经在生产环境中使用实体框架好几个月了,就在昨天开始使用我们的 DbContext 子类查询数据库时,一些机器上出现错误:

"应用程序的连接字符串'MyConnectionString' 配置文件不包含所需的 providerName 属性”

我们的问题很容易解决:我将"providerName="System.Data.SqlClient" 添加到所有已部署服务器和工作站的配置文件中的连接字符串中。

然而,谜团依然存在:根据the documentation

providerName 属性是可选的,默认是 "System.Data.SqlClient"。

更神秘的是为什么会突然发生这种情况,而且显然只在某些机器上发生。我不知道 EF 或 .NET 版本的任何最新更改、任何 SQL Server 版本或提供程序更改或任何内容。但我意识到一定有一些我忽略了。

.NET 4.5 英孚 5.0

任何人有任何提示或见解?

【问题讨论】:

  • 一旦我为另一个项目安装了 MySQL ADO.NET 连接器后,我的开发机器就开始对我执行此操作……但 MySQL 似乎将自身添加到 machine.config 文件中。我只是假设 System.Data.SqlClient 不是默认值 - 如果只有一个配置的实体框架提供程序,更准确地说它是可选的。

标签: .net entity-framework connection-string


【解决方案1】:

某些驱动程序组合将导致机器处于不明确应该使用哪个驱动程序的状态,因此它需要一个明确的提供程序名称。

可能是其他一些单独的应用程序或驱动程序安装,或运行的自动 Windows 更新。

不过,明确提供提供者名称并没有什么坏处。您应该可以添加它;您的连接字符串中只有几个额外的字符。它在未来永远不需要改变或任何事情。

您更新后的声明应为:

<connectionStrings>
  <add
    name="MyConnectionStringName"
    connectionString="Connection string goes here"
    providerName="System.Data.SqlClient" />
</connectionStrings>

【讨论】:

  • 嗨,很抱歉这个愚蠢的问题。但是 providerName 到底是什么意思呢?是命名空间吗?它是否引用特定的驱动程序/DLL?
  • 在这种情况下,Provider 通常与驱动程序大致相同,是的。
【解决方案2】:

你也可以使用:

providerName="System.Data.EntityClient"

然后:

<add name="name_here" connectionString="Data Source="pathofdatabase" providerName="System.Data.EntityClient" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多