从EntityFramework获取数据库类型'`DbContext`

时间:2015-07-10 15:10:52

标签: 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>

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

我的问题是,是否有更简单的方法。

1 个答案:

答案 0 :(得分:2)

你用过这个吗?

DbContext.Database.Connection.GetType().Name

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