我需要能够同时连接到 2 个数据库。数据库具有相同的结构,所以我认为我应该能够使用相同上下文的 2 个实例。但是我无法让它工作。一旦我为第二个实例设置连接字符串,第一个实例的连接字符串就会更改以匹配它。我错过了什么关于 EF 的东西吗?
我有以下帮助类来创建上下文。
public class SettingsHelper
{
private static SettingsHelper instance;
public static SettingsHelper Instance
{
get
{
if (instance == null)
{
instance = new SettingsHelper();
}
return instance;
}
}
public static Context CreateContext(string constr )
{
try
{
var db = new Context(constr);
return db;
}
catch (Exception ex)
{
HandleException.Show(ex);
}
return null;
}
}
实际的上下文类包含
public class Context : DbContext
{
public Context(string connString)
: base(connString)
{
// some code
}
}
如果我按以下方式创建两个上下文
using (Context firstContext = SettingsHelper.CreateContext( "conn1" ))
{
// firstContext has connection string "conn1"
using (Context secondContext = SettingsHelper.CreateContext("conn2" ))
{
// firstcontext now has the same connection string "conn2"
}
}
conn1 和 conn2 在 app.config 中定义
这是我的背景。我想知道我的问题是否是因为 _connectionString 是静态的?但是,如果我将其更改为公共,我会在上下文初始化程序中收到错误“无法访问静态上下文中的非静态字段”
public class Context : DbContext
{
static string _connectionString;
public Context()
: base(_connectionString ?? "Syrius")
{
}
public Context(string connString)
: base(connString)
{
_connectionString = connString;
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Migrations.Configuration>());
}
public Context(string connString, int TimeOutSecs)
: base(connString)
{
_connectionString = connString;
}
public DbSet<Label> Labels { get; set; }
// etc
}