为实体构造函数传递ConnectionString必须包含provider =“System.Data.SqlClient”&的providerName = “System.Data.EntityClient”

时间:2013-01-17 09:43:36

标签: entity-framework entity-framework-4 connection-string dbcontext entities

我需要将连接字符串传递给Entity对象构造函数(不能存储在config中)。

我已成功使用EntityConnectionStringBuilder连接到数据库,但相信因为它不允许我添加providerName="System.Data.EntityClient"(只有提供者属性> provider="System.Data.SqlClient“)不允许我更新数据库

如何将它与字符串构建器中的连接字符串一起传递给构造函数。

我的连接字符串与此

基本相同
connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
         multipleactiveresultsets=true'" providerName="System.Data.EntityClient"

1 个答案:

答案 0 :(得分:0)

您不必设置外部providerName - 您只需要从web.config复制connectionString条目。

var sqlBuilder = new SqlConnectionStringBuilder();
...

var entBuilder = new EntityConnectionStringBuilder();
entBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
entBuilder.Provider = "System.Data.SqlClient";
entBuilder.Metadata = "res://...";

using ( var db = new AdventureWorksContext( entBuilder.ConnectionString ) )
{
  ...

此外,您的metadata配置看起来很奇怪。我一直使用这种格式:

metadata=res://*/AdventureWorks.csdl|res://*/AdventureWorks.ssdl|res://*/AdventureWorks.msl;

如果您使用的是Code First,则只需要SQL连接字符串。

请参阅此问题:Entity Framework Code First and Connection String Issue