如何在连接字符串中为 EF Code First 配置 ProviderManifestToken
Posted
技术标签:
【中文标题】如何在连接字符串中为 EF Code First 配置 ProviderManifestToken【英文标题】:How to configure ProviderManifestToken for EF CodeFirst in a Connection String 【发布时间】:2011-07-25 12:06:37 【问题描述】:目前,我将一个数据库名称传递给DbContext
的构造函数。在我的App.Config
文件的connectionStrings
部分中,我添加了一个连接字符串并指定了提供程序名称:
<connectionStrings>
<add name="myConnectionString" connectionString="[..]" providerName="System.Data.SqlClient"/>
</connectionStrings>
现在,我想从其他类型的配置源获取连接字符串,但抛出了 ProviderIncompatibleException
。异常包含以下消息:
"The provider did not return a providermanifesttoken string".
那么,如何在连接字符串中指定提供程序名称?目前我的字符串包含data source
、database
和其他一些配置设置。
【问题讨论】:
How to configure ProviderManifestToken for EF Code First的可能重复 【参考方案1】:提供者由连接类型定义,连接由其连接工厂创建,该连接工厂在静态属性Database.DefaultConnectionFactory
中设置。此属性的默认值为SqlConnectionFactory
,因此除非您连接到不同的数据库服务器(例如 SQL Server CE),否则它应该可以正常工作。如果它不能确保您的连接字符串是正确的。如果 EF 无法连接到 SQL 服务器,有时会触发此异常(我想我看到此异常的凭据无效、数据库名称无效或 SQL 服务器实例名称无效)。
编辑:
为了完整性:仅当您将连接字符串传递给上下文时才使用连接工厂。您还可以传递整个连接实例,并且连接工厂将不被使用。提供商清单令牌将从您将传递给上下文的连接类型推断出来。
【讨论】:
好点。我想知道是否可以使用 SqlConnectionFactory 提供连接字符串和提供程序类型(对于 sql ce 4)。 我不这么认为,因为SqlConnectionFactory
与SqlConnection
紧密耦合,它会导致 SQL Server CE 的提供程序清单令牌不正确。 System.Data.Entity.Infrastructure.SqlCeConnectionFactory
应该能够为 SQL Server CE 3.5 和 4.0 创建正确的连接类型。
是的,刚刚尝试过,Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", "Data Source=|DataDirectory|Database.sdf");
与 CE4 配合使用。另一个好点。
@Ladislav Mrnka - 你是对的。实际上,我指定了一个错误的data source
。该例外具有误导性。谢谢。【参考方案2】:
这可能不是您的问题,但如果您根本无法连接到数据库,也会出现此错误 - 我们的网络阻塞了端口 1433。打开它,错误消失了。
【讨论】:
以上是关于如何在连接字符串中为 EF Code First 配置 ProviderManifestToken的主要内容,如果未能解决你的问题,请参考以下文章
EF Code First CREATE DATABASE 权限在数据库“主”中被拒绝