2015-07-10 57 views
5

问题很简单:给定一个EntityFramework的实例DbContext,我想告诉它所连接的有效数据库。 AFAIK目前有用于SQL Server的EF提供程序的当前实现,Microsoft,MySQL,Oracle和Postgres。从EntityFramework的`DbContext`获取数据库类型

我们假设我只能访问我方法中的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来检测的情况下,数据库类型,一个需要执行少见操作。

我的问题是如果有一个更简单的方法。

回答

2

你用这个吗?

DbContext.Database.Connection.GetType().Name 

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

+0

该对象始终是'EntityConnection'的一个实例。棘手意味着我不喜欢使用反射。这很容易出错。当然,没有_easy_“GetDbType()==”MYSQL“API哈哈 –

相关问题