どのDBプロバイダが使用されているかを実行時にEFコアで判断する

asp.net asp.net-core c# entity-framework entity-framework-core

質問

ASP.NET CoreおよびEF Coreシステムでは、システムのさまざまな部分に異なるデータベースを使用します。私は実行時にどのDBプロバイダが使用されているのかを知る必要があります。これは、これを考慮する必要があるためです。

起動時に、SQL Server用にこれがあります。

  services.AddDbContext<MyContext>(
    options => options.UseSqlServer(config.GetConnectionString("DefaultConnection"))
  );

またはこれはSQLite用です:

  services.AddDbContext<MyContext>(
    options => options.UseSqlite(config.GetConnectionString("DefaultConnection"))
  );

重要なのは、どのデータベースが使用されているかに関する知識がシステム内のどこかに含まれていることです。

システムの任意の時点で、どのデータベースを使用しているかをどのように判断できますか? MyContextアクセスできます。この情報を明らかにすることができるものがありますか?

受け入れられた回答

MyContextにアクセスできるシステムのどこでも、これを行う:

context.Database.GetDbConnection().GetType().Name

たとえば、SQLiteの場合はSqliteConnection 、SQL Serverの場合はSqlServerConnectionなどです。

しかし、後で接続を処理する必要があるかどうかはわかりません!


人気のある回答

私は自分のプロジェクトで2つのデータベースプロバイダを使用しています。

  • Npgsql.EntityFrameworkCore.PostgreSQL
  • Microsoft.EntityFrameworkCore.SqlServer

あなたのクライアントプロジェクトにその参照を含めて、Nuget Package Managerから追加することができます。

参照には次の拡張メソッドが含まれています。

Boolean isPostgreSQL = context.Database.IsNpgsql();
Boolean isSqlServer = context.Database.IsSqlServer();


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ