从EntityFramework的`DbContext`中获取数据库类型

usr*_*ΛΩΝ 5 c# entity-framework

问题很简单:给定一个EntityFramework的实例DbContext,我想告诉它所连接的有效数据库.AFAIK目前有针对SQL Server的EF提供程序的实现,由Microsoft,MySQL,Oracle和Postgres提供.

我们假设我只能"访问" DbContext我方法中的实例.我如何检测到我正在使用MSSQL,MySQL,Postgres等?(我想知道是否有一个用于EF的Oracle客户端,这会加起来)

目前我可以尝试一些反思:

  • DbContext.Connection 通常是一个例子 EntityConnection
  • EntityConnection暴露StoreConnection属性,这应该是我们的ADO连接.针对已知类(例如MySqlConnection)测试它应该有效

但是我相信这种方法有点棘手.普通的App.config包含以下内容:

<providers>
  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
Run Code Online (Sandbox Code Playgroud)

我有点困惑,我希望EF有一个更好的API来检测数据库类型,以防需要执行不常见的操作.

我的问题是,是否有一个更简单的方法.

myb*_*ame 6

你用过这个吗?

DbContext.Database.Connection.GetType().Name
Run Code Online (Sandbox Code Playgroud)

如果是,那么棘手的部分是什么?

  • “Microsoft.EntityFrameworkCore”中不存在“Connection”属性。 (2认同)