在运行时交换connectionString参数的最佳方法

时间:2014-02-21 12:54:00

标签: c# entity-framework

我有一个由EF生成的课程。

public partial class AMIEntities : DbContext
{
    public AMIEntities()
        : base("name=AMIEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<AMI_DATA> AMI_DATA { get; set; }
    public DbSet<AMI_DATA_HISTORY> AMI_DATA_HISTORY { get; set; }
}

在connectionString的app.config文件中,我将加密的密码存储到MSSQL服务器。我可以在哪里添加代码来替换应用程序中所有调用的connectionString,而无需更改已创建代码?

using (var context = new AMIEntities())
{
  var test = context.TABLE.ToList();
}

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

虽然我非常讨厌处理生成的代码,但您可以将以下构造函数添加到AMIEntities类中。

public AMIEntities(string connectionString)
  :base(connectionString)
{ } 

然后,您可以在运行时换出连接字符串以访问另一个数据库,例如

using (var context = new AMIEntities(your_New_ConnectionString))
{
  var test = context.TABLE.ToList();
}

注意:您必须通过EF连接字符串,或者必须从简单的连接字符串构建新的EF连接。

更新

为了保留代码更改,即使重新生成生成的代码,您也可以创建一个继承自AMIEntities类的类,并在那里设置构造函数,基本上:

public class AMIEntitiesExtended : AMIEntities
{
    public AMIEntitiesExtended (string connectionString)
      :base(connectionString)
    { } 

}

然后调用您的新类而不是生成的类:

using (var context = new AMIEntitiesExtended(your_New_ConnectionString))
{
  var test = context.TABLE.ToList();
}