问题很简单:给定一个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来检测数据库类型,以防需要执行不常见的操作。
我的问题是,是否有更简单的方法。
答案 0 :(得分:2)
你用过这个吗?
DbContext.Database.Connection.GetType().Name
如果是,那么棘手的部分是什么?