我正在使用EF4.1,已升级我的项目,现在生成POCO类以使用DbContext并且玩得开心 - 除了动态更改连接字符串。此项目导入CSV文件,然后将数据合并到2个(相同的)数据库中。一个DB是我们的PROD服务器,另一个是我们的DEV服务器。我意识到我改变的方式(下面)不再有效,因为我切换到POCO。
我在做什么:
internal static Model.RIVFeedsEntities GetFeedsDB()
{
_serverName = "RivDB1";
// Create the dbZach database entity...
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
string connString = String.Format(@"metadata=res://*/Model.Feeds.csdl|res://*/Model.Feeds.ssdl|res://*/Model.Feeds.msl;provider=System.Data.SqlClient;provider connection string='Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True'"
, _serverName
, _databaseName);
entityBuilder.ConnectionString = connString;
entityBuilder.Metadata = "res://*/";
_sourceEntities = new Model.RIVFeedsEntities(entityBuilder.ConnectionString);
_sourceEntities.CommandTimeout = 60;
return _sourceEntities;
}
internal static Model.RIVFeedsEntities GetFeedsDBDev()
{
_serverName = "DB1";
// Create the dbZach database entity...
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
string connString = String.Format(@"metadata=res://*/Model.Feeds.csdl|res://*/Model.Feeds.ssdl|res://*/Model.Feeds.msl;provider=System.Data.SqlClient;provider connection string='Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True'"
, _serverName
, _databaseName);
entityBuilder.ConnectionString = connString;
entityBuilder.Metadata = "res://*/";
_sourceEntities = new Model.RIVFeedsEntities(entityBuilder.ConnectionString);
_sourceEntities.CommandTimeout = 60;
return _sourceEntities;
}
正如您所看到的,我真正需要做的就是更改连接字符串的SERVER部分。
如何使用DbContext对象执行此操作?我可以看到base允许在构造函数中发送名称或conn字符串,但DbContext本身没有,我没有看到任何暴露。
TIA
答案 0 :(得分:1)
当你从DbContext继承时,你可以覆盖一些DbContext构造函数。
然后您可以从不同的签名中进行选择,以找到最适合您的签名。
他们正在使用SqlConnection对象或ConnectionString。
我认为这仍然适用于EF 4.1的RTW版本