使用EF Core在运行时确定正在使用哪个db提供程序

gro*_*kky 5 c# asp.net entity-framework entity-framework-core asp.net-core

在我们的ASP.NET Core和EF Core系统中,我们对系统的不同部分使用不同的数据库.我需要能够在运行时告诉使用哪个数据库提供程序,因为有些东西需要考虑到这一点.

在启动期间,SQL Server有这样的:

  services.AddDbContext<MyContext>(
    options => options.UseSqlServer(config.GetConnectionString("DefaultConnection"))
  );
Run Code Online (Sandbox Code Playgroud)

或者这适用于SQLite:

  services.AddDbContext<MyContext>(
    options => options.UseSqlite(config.GetConnectionString("DefaultConnection"))
  );
Run Code Online (Sandbox Code Playgroud)

关键是正在使用哪个数据库的知识,包含在系统内的某个地方.

在系统的某个任意点,我如何确定我正在使用哪个数据库?我可以访问MyContext.那里有什么可以揭示这些信息吗?

Jom*_*oma 9

我在我的项目中使用2数据库提供程序。

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

可以从Nuget程序包管理器中添加客户项目中包含的引用。

这些参考包含以下扩展方法。

Boolean isPostgreSQL = context.Database.IsNpgsql();
Boolean isSqlServer = context.Database.IsSqlServer();
Run Code Online (Sandbox Code Playgroud)


gro*_*kky 6

在您可以访问的系统中的任何位置MyContext执行此操作:

context.Database.GetDbConnection().GetType().Name
Run Code Online (Sandbox Code Playgroud)

例如,它适用SqliteConnection于SQLite或SqlServerConnectionSQL Server等.

但是我不确定你之后是否需要处理连接!