複数のPostgresスキーマで同じDBContextを使用することが有効なアーキテクチャであることを理解したいと思います。EntityFrameworkCore複数のPGスキーマの同じDBContext
明らかに、アプリケーションの複数のインスタンスを実行し、appsettings.jsonの構成パラメータを使用してモデル作成のDBContextを作成し、異なるアプリケーションのデータを異なるスキーマに分散させましょう。 [OK]を
複数のPostgresスキーマで同じDBContextを使用することが有効なアーキテクチャであることを理解したいと思います。EntityFrameworkCore複数のPGスキーマの同じDBContext
明らかに、アプリケーションの複数のインスタンスを実行し、appsettings.jsonの構成パラメータを使用してモデル作成のDBContextを作成し、異なるアプリケーションのデータを異なるスキーマに分散させましょう。 [OK]を
編集
、あなたがしようとしている場合
(私は同じアプリケーションに二つの別個のデータベースを満たすためにこれをしたことを覚えて、あなたのケースで、それは同じデータベースになります)、私は私の答えを改善しましょうユーザーがアクセスできるものにアクセスするために同じデータベース内の別のユーザーと接続するには別の接続文字列を入れなければならない 私は自分の設定ファイルで変数を使用するこのように:
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)にどの接続を使用するか、どのタイプの必ずデータ
完全に有効ですが、私は、スキーマは、いくつかの共通点を持っていると仮定するとmhmmこれは私が尋ねたものではありません!とにかく答えてくれてありがとう! –
、なぜ?しかし、スキーマが完全に異なっている場合、私はそうすることの要点を見ません。 –
関心事の分離にdatabase' 'ごとに1つのDbContextをお勧めします
–ポイントは....我々は、同じデータベース上で異なるスキーマを使用してマルチテナントシステムをシミュレートする必要があります... –