2017-09-14 12 views
0

複数のPostgresスキーマで同じDBContextを使用することが有効なアーキテクチャであることを理解したいと思います。EntityFrameworkCore複数のPGスキーマの同じDBContext

明らかに、アプリケーションの複数のインスタンスを実行し、appsettings.jsonの構成パラメータを使用してモデル作成のDBContextを作成し、異なるアプリケーションのデータを異なるスキーマに分散させましょう。 [OK]を

+0

、なぜ?しかし、スキーマが完全に異なっている場合、私はそうすることの要点を見ません。 –

+0

関心事の分離にdatabase' 'ごとに1つのDbContextをお勧めします

<appSettings> <!--Usar: PostgreSql | SqlServer --> <add key="TipoBancoDados" value="PostgreSql" /> <add key="DataBaseContext" value="PgSqlAdmin" /> </appSettings> 

+0

ポイントは....我々は、同じデータベース上で異なるスキーマを使用してマルチテナントシステムをシミュレートする必要があります... –

答えて

0

編集

、あなたがしようとしている場合

(私は同じアプリケーションに二つの別個のデータベースを満たすためにこれをしたことを覚えて、あなたのケースで、それは同じデータベースになります)、私は私の答えを改善しましょうユーザーがアクセスできるものにアクセスするために同じデータベース内の別のユーザーと接続するには別の接続文字列を入れなければならない 私は自分の設定ファイルで変数を使用するこのように:

public class MyDbContext: DbContext 
{ 

    #region ..:: Fields ::.. 

    private static readonly string DataBaseContext = ConfigurationManager.AppSettings["DataBaseContext"]; 

    #endregion 

    #region ..:: Construtor ::.. 

    public MyDbContext() 
     : base(DataBaseContext) 
    { 
     //Database.CreateIfNotExists(); 
    } 

    #endregion 

    .......... 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     ........ 
    } 

} 

OnModelCreatingたとえば、PostgreSQLやのSQLServerを使用するデータベースのタイプを選択するとき、それは私の作品

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    #region ..:: Definições ::.. 

    var tipoBancoDados = ConfigurationManager.AppSettings["TipoBancoDados"]; 
    var mySchema = ConfigurationManager.AppSettings["mySchema"]; 

    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    modelBuilder.HasDefaultSchema(tipoBancoDados.Contains("PostgreSql") ? "public" : "dbo"); 
    //modelBuilder.HasDefaultSchema(mySchema); 

    #endregion 


    ..... 
} 

接続の名前が含まれている必要がありあなたの DataBaseContext変数を使用する

、あなたの要件に応じて

<connectionStrings> 
    <add name="PgSqlAdmin" connectionString="SERVER=X.X.X.X;UID=postgres;PWD=PGPASSOWRD;PORT=5432;DATABASE=mydatabase;" providerName="Npgsql" /> 
    <add name="PgSqlUserA" connectionString="SERVER=X.X.X.X;UID=UserA;PWD=PGPASSOWRD;PORT=5432;DATABASE=mydatabase;" providerName="Npgsql" /> 
    <add name="RemoteDb" connectionString="Data Source=X.X.X.X;Initial Catalog=MyDataBase;MultipleActiveResultSets=True;User Id=sa;Password=SqlServerPassword" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

は、私は接続の文字列にpostgresユーザ用とユーザーAのための1つをPostgreSQL用の2つのエントリを置くことがわかり

これは問題を解決するかどうかはわかりませんが、同じアプリケーションでPostgreSQLとSqlServerのどちらかを選択することができますか?app.Config(またはWeb.Config)にどの接続を使用するか、どのタイプの必ずデータ

完全に有効ですが、私は、スキーマは、いくつかの共通点を持っていると仮定すると
+0

mhmmこれは私が尋ねたものではありません!とにかく答えてくれてありがとう! –

関連する問題