2017-11-17 15 views
0

は、次のコードセグメントを考えてみましょう:C#.NET Entity Frameworkのマルチテナントのベストプラクティス

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext(String connectionString) : base(connectionString) 
    {    
    } 
} 

public class ContextNameDatabaseContext : DatabaseContext 
{ 
    public ContextNameDatabaseContext(String connectionString) : base(connectionString) 
    { 
    } 
} 

1は、各クライアントがそのを持っているマルチテナント・ソリューションのためのバックエンドを構築する際、それが最善の方法だと思いますユーザーがログアウトするまでデータの状態を維持しますか?

このインスタンスでこれらのクラスを使用する開発者は、 'DatabaseContext'クラスが 'ContextNameDatabaseContext'クラスのベースとして機能する場合、クラスの使用時期と使用方法に注意し、注意する必要があります。

ご意見やご提案をお寄せください。

+0

正確にはどのような練習ですか?異なる接続文字列をコンストラクタに渡すか? – Evk

+0

ここでのキーは、 'DbContext'基本クラスに異なる接続文字列を注入するだけでなく、ユーザーがログインするときにユーザーがログアウトするまでその接続を維持します。 – Tech

+0

あなたが提供したコードがこれをどのように解決するのですか? – Evk

答えて

0

1つの方法は、すべてのデータベース接続文字列をデータベースのパラメータとして保持することです。しかし、暗号化されていることを保証する必要があります。

その後、あなたのDB層で、あなたがそれに応じて接続文字列を復号化して構成した後、プレーンテキストでパラメータとして接続を渡すことができます。

public class MyDatabase: DbContext 
{ 
    public MyDatabase(string connString) 
    { 
     this.Database.Connection.ConnectionString = connString; 
    } 
    public DbSet<Order> Orders{ get; set; } 
} 

あなたは注入する、.NETのコアを使用している場合にもIOptionsを使用することができます依存関係としての接続文字列。

+0

IOptionsインターフェイスに精通していないので、間違いなくそれを読み上げます。 – Tech