[英]EF 6 - Switch between schema at runtime
我正在開發具有EF 6的ASP.NET 4.6.2 Web App。后端是采用幾種模式的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());
}
}
謝謝你的幫助 !
簡單使用兩個連接字符串
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.