我希望能够在配置(app.config,web.config)中分别处理实际的连接字符串和EF元数据连接字符串--目的是使实际的数据源更加明显。
我完全控制了EF上下文的创建(yay IoC!),但不想硬编码任何值。最好是这样的:
<add name="EfEntities"
connectionString="metadata=res://*/..;provider connection string=NO;.." />
<add name="EfEntities_Provider"
connectionString="data source=SERVER;initial catalog=DB;user id=ME" />它也是可以接受的,而且可能更好的是,部署的信任只有企业集团的EF连接字符串-只要它是由源信任的单独属性构建的。(但这一级别的配置转换使我无法理解。)
我很好地使用针对Designer / Updater的集团化EF“连接字符串”-- EDMX与部署的目标程序集中的使用情况不同。
发布于 2015-02-18 22:22:02
在我的项目中,我用代码构建EF连接字符串,并将它传递给上下文对象的构造函数,如下所示:
void InitContext() {
String actualConnectionString = ConfigurationManager.ConnectionStrings["server123"].ConnectionString;
String efConnectionString = String.Format(CultureInfo.InvariantCulture, "metadata=res://*/..;provider connection string={0};.", actualConnectionString);
_context = new MyEFContext( efConnectionString );
}发布于 2015-02-18 23:29:59
我决定“去”戴的回答背后的想法。它可能有问题。密码最好不包含引号);但是它在这里适用于测试,并且在配置转换中感觉更“可见”。
代码看起来就像:
var edmxMetadata = GetConnectionStringSetting("EfEntities_Metadata");
var providerConnection = GetConnectionStringSetting("EfEntities_Provider");
var edmxCS = string.Format(@"{0};provider={1};provider connection string=""{2}""",
edmxMetadata.ConnectionString,
providerConnection.ProviderName,
providerConnection.ConnectionString);
// (and by and by)
var context = new EfEntities(edmxCS);其中:
<!-- just the metadata -->
<add name="EfEntities_Metadata"
connectionString="metadata=res://*/EfEntities.csdl|res://*/EfEntities.ssdl|res://*/EfEntities.msl"
providerName="System.Data.EntityClient" />
<!-- just the provider connection string -->
<add name="EfEntities_Provider"
connectionString="data source=SERVER;initial catalog=DB;user id=ME"
providerName="System.Data.SqlClient" />https://stackoverflow.com/questions/28595050
复制相似问题