C# 如何在连接字符串中为EF CodeFirst配置ProviderManifestToken

C# 如何在连接字符串中为EF CodeFirst配置ProviderManifestToken,c#,entity-framework,connection-string,ef-code-first,C#,Entity Framework,Connection String,Ef Code First,目前,我正在将数据库名称传递给DbContext的构造函数。在我的App.Config文件的connectionStrings部分,我添加了一个连接字符串并指定了提供者名称: <connectionStrings> <add name="myConnectionString" connectionString="[..]" providerName="System.Data.SqlClient"/> </connectionStrings> 那么,如

目前,我正在将数据库名称传递给
DbContext
的构造函数。在我的
App.Config
文件的
connectionStrings
部分,我添加了一个连接字符串并指定了提供者名称:

<connectionStrings>
    <add name="myConnectionString" connectionString="[..]" providerName="System.Data.SqlClient"/>
</connectionStrings>

那么,如何在连接字符串中指定提供者名称呢?当前我的字符串包含
数据源
数据库
和一些其他配置设置。

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

编辑:


为了完整性:只有将连接字符串传递给上下文时,才使用连接工厂。您还可以传递整个连接实例,并且连接工厂将不被使用。提供者清单令牌将根据您将传递到上下文的连接类型进行推断。

这可能不是您的问题,但如果您无法连接到数据库,也会发生此错误-我们的网络阻塞了端口1433。打开它,错误就会消失。

好的观点。我想知道是否可以使用SqlConnectionFactory提供连接字符串和提供程序类型(对于sql ce 4)。我不这么认为,因为
SqlConnectionFactory
SqlConnection
紧密耦合,这会导致sql Server ce的提供程序清单令牌不正确
System.Data.Entity.Infrastructure.SqlCeConnectionFactory
应该能够为SQL Server CE 3.5和4.0.Yep创建正确的连接类型,只是尝试了一下,并且
Database.DefaultConnectionFactory=new SqlCeConnectionFactory(“System.Data.SqlServerCe.4.0”,“Data Source=|DataDirectory | Database.sdf”)与CE4一起使用。另一个很好的观点。@Ladislav Mrnka-你说得对。实际上,我指定了一个错误的
数据源。这一例外具有误导性。谢谢。可能有两份
"The provider did not return a providermanifesttoken string".