更改Entity Framework 4.1 POCO中的连接字符串

时间:2011-04-18 17:13:02

标签: entity-framework-4.1

我正在使用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

1 个答案:

答案 0 :(得分:1)

当你从DbContext继承时,你可以覆盖一些DbContext构造函数。

然后您可以从不同的签名中进行选择,以找到最适合您的签名。

在此论坛中http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/2efc32f7-23ad-4fad-84cf-279badb394a5

他们正在使用SqlConnection对象或ConnectionString。

我认为这仍然适用于EF 4.1的RTW版本