簡體   English   中英

EF 6-在運行時在架構之間切換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM