15

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

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

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

然而,谜团仍然存在:根据文档

providerName 属性是可选的,默认为“System.Data.SqlClient”。

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

.NET 4.5 英孚 5.0

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

4

2 回答 2

15

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

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

但是,明确提供提供者名称并不会造成任何伤害。您应该可以添加它;您的连接字符串中只有几个额外的字符。它在未来永远不需要改变或任何事情。

您更新后的声明应为:

<connectionStrings>
  <add
    name="MyConnectionStringName"
    connectionString="Connection string goes here"
    providerName="System.Data.SqlClient" />
</connectionStrings>
于 2015-01-09T04:13:33.117 回答
4

你也可以使用:

providerName="System.Data.EntityClient"

然后:

<add name="name_here" connectionString="Data Source="pathofdatabase" providerName="System.Data.EntityClient" />
于 2016-10-05T00:11:50.353 回答