我正在使用EF 6开发ASP.NET 4.6.2 Web应用程序。后端是几个模式中的PostgreSQL数据库:表和视图在每个模式中完全相同。根据用户的操作,我必须专门连接到一个或另一个模式。
通过覆盖OnModelCreating方法只能执行一次。
如果用户想要改变他的环境,我可以使用正确的参数实例化上下文,但它不会调用OnModelCreating方法。上下文保存在某处并连接到先前的模式。
- > 如何使上下文无效或强制切换到其他架构?
这是我的代码:
public partial class MyDB : DbContext
{
public Instances Instance { get; set; }
public string Schema
{
get
{
switch(Instance)
{
case Instances.I1:
return "schema1";
case Instances.I2:
return "schema2";
case Instances.I3:
return "schema3";
case Instances.I4:
return "schema4";
case Instances.I5:
return "schema5";
default:
return "public";
}
}
}
public MyDB(bool Proxy, Instances Instance)
: base("MyDB")
{
this.Configuration.ProxyCreationEnabled = Proxy;
this.Instance = Instance;
this.Database.Log = s => System.Diagnostics.Debug.Print(s);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema(Schema);
modelBuilder.Conventions.Add(new FunctionsConvention<MyDB>(Schema));
}
}
class NpgsqlConfiguration : DbConfiguration
{
public NpgsqlConfiguration()
{
SetModelCacheKey(ctx => new EntityModelCacheKey((ctx.GetType().FullName + ctx.Database.Connection.ConnectionString).GetHashCode()));
SetProviderServices("Npgsql", Npgsql.NpgsqlServices.Instance);
SetProviderFactory("Npgsql", Npgsql.NpgsqlFactory.Instance);
SetDefaultConnectionFactory(new Npgsql.NpgsqlConnectionFactory());
}
}
感谢您的帮助!
答案 0 :(得分:1)
简单使用两个连接字符串
MyDB db;
if (user.Type == 1)
{
db = new MyDb("nameOfConnectionString1");
}
else
{
db = new MyDb("nameOfConnectionString2");
}
您可能需要为构造函数
创建重载public MyDB(string conStr, bool Proxy, Instances Instance)
: base(conStr)