如何在连接字符串中为 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 sourcedatabase和其他一些配置设置。

【问题讨论】:

How to configure ProviderManifestToken for EF Code First的可能重复 【参考方案1】:

提供者由连接类型定义,连接由其连接工厂创建,该连接工厂在静态属性Database.DefaultConnectionFactory 中设置。此属性的默认值为SqlConnectionFactory,因此除非您连接到不同的数据库服务器(例如 SQL Server CE),否则它应该可以正常工作。如果它不能确保您的连接字符串是正确的。如果 EF 无法连接到 SQL 服务器,有时会触发此异常(我想我看到此异常的凭据无效、数据库名称无效或 SQL 服务器实例名称无效)。

编辑:

为了完整性:仅当您将连接字符串传递给上下文时才使用连接工厂。您还可以传递整个连接实例,并且连接工厂将不被使用。提供商清单令牌将从您将传递给上下文的连接类型推断出来。

【讨论】:

好点。我想知道是否可以使用 SqlConnectionFactory 提供连接字符串和提供程序类型(对于 sql ce 4)。 我不这么认为,因为SqlConnectionFactorySqlConnection 紧密耦合,它会导致 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 初试

EF Code First创建数据库

EF Code First CREATE DATABASE 权限在数据库“主”中被拒绝

EF Code First 连接MySql

EF 连接 mysq l数据库 code first模式 的实践

EF Code First CTP 5 和 SQL SErver 2008 R2