【发布时间】:2015-05-28 14:33:52
【问题描述】:
在 Asp.net Entity 框架中,我们首先使用模型,同一个数据库首先使用 DB, Model first 和 DB first 有两个连接字符串。 那么我们如何为 Model first,DB first 创建单个连接字符串。
【问题讨论】:
在 Asp.net Entity 框架中,我们首先使用模型,同一个数据库首先使用 DB, Model first 和 DB first 有两个连接字符串。 那么我们如何为 Model first,DB first 创建单个连接字符串。
【问题讨论】:
你可以使用EntityConnectionStringBuilder:
string sqlConnectionString = "Data Source=localhost;
Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;multipleactiveresultsets=true"
string providerName = "System.Data.SqlClient";
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = providerName;
entityBuilder.ProviderConnectionString = sqlConnectionString;
entityBuilder.Metadata = @"res://*/AdventureWorksModel.csdl|
res://*/AdventureWorksModel.ssdl|
res://*/AdventureWorksModel.msl";
string entityConnectionString = entityBuilder.ToString();
或者,如果你足够勇敢,你可以尝试重新格式化 entityConnectionString:
string sqlConnectionString = "Data Source=localhost;
Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
multipleactiveresultsets=true"
string entityConnectionString =
string.Format("metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl; provider=System.Data.SqlClient;provider connection string='{0}'" providerName=\"System.Data.EntityClient\"",
sqlConnectionString
);
编辑:
或者,您可以采取相反的方法,让我们保留 EntityConnectionString 并从中提取 SqlConnectionString:
string entityConnectionString = 'xxxxxxx';
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(entityConnectionString);
string sqlConnectionString = entityBuilder.ProviderConnectionString;
【讨论】:
连接字符串会有所不同:第一个数据库将在开头具有元数据 [嵌入] 位置。您可以将“普通”代码优先连接字符串放在 web.config 中,并在 DB First DbContext 构造函数中添加“元数据部分”,使用静态方法构建所需的 EntityConnectionString。
例子:
public MyContext() : base(BuildConnectionString())
{
}
private static string BuildConnectionString()
{
varsqlBuilder = new SqlConnectionStringBuilder();
//dinamically prepare the provider connection string here, using the CF one in the web.config
//[..]
//now build the entity connection string, using the one just built as ProviderConnectionString
var entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
entityBuilder.Metadata = "res://*/";
entityBuilder.Provider = "System.Data.SqlClient";
return entityBuilder.ToString();
}
【讨论】: