C# 在运行时交换connectionString参数的最佳方法
我有一个由EF生成的类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
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();
}