我有一个由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();
}
最好的方法是什么?
答案 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();
}