繁体   English   中英

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

[英]Get the database type from EntityFramework's `DbContext`

问题很简单:给定一个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来检测数据库类型,以防需要执行不常见的操作。

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

你用过这个吗?

DbContext.Database.Connection.GetType().Name

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM