2015-07-10 22 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哈哈 –