Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时交换connectionString参数的最佳方法_C#_Entity Framework - Fatal编程技术网

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

C# 在运行时交换connectionString参数的最佳方法,c#,entity-framework,C#,Entity Framework,我有一个由EF生成的类 public partial class AMIEntities : DbContext { public AMIEntities() : base("name=AMIEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirs

我有一个由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; }
}

最好的方法是什么?

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

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();
}

编辑生成的代码从来都不是一个好主意,谁知道任何更改是否/何时会被覆盖并消失?感谢您的帮助。我是这样做的,也没有发现任何更有意义的东西。
using (var context = new AMIEntitiesExtended(your_New_ConnectionString))
{
  var test = context.TABLE.ToList();
}