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

8
这个问题非常简单:假设有一个EntityFramework的DbContext实例,我想知道它连接到了哪个数据库。据我所知,目前EF提供程序有Microsoft的SQL Server,Oracle的MySQL以及可能还有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个回答

6
你使用过这个吗?
DbContext.Database.Connection.GetType().Name

如果是的话,那么难点在哪里?

那个对象始终是EntityConnection的一个实例。Tricky意味着我不喜欢使用反射。它容易出错。当然,没有“易于使用的“GetDbType()==”MYSQL“API,哈哈。 - usr-local-ΕΨΗΕΛΩΝ
2
Microsoft.EntityFrameworkCore 中不存在 Connection 属性。 - robyaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接