2016-12-08 16 views
2

我正在開發的ASP.NET應用程序的要求之一是要與數據庫無關的;也就是說,能夠與大量的數據庫引擎進行交流,而無需對代碼進行重大更改。我已經知道解決方案的第一部分涉及在接口後面抽象DAL(數據訪問層),並且可以在不更改代碼的情況下替換DAL,但是我面臨的問題是如何實現DAL。數據庫不可知的ASP.NET應用程序?

研究已經在這方面是非常不確定的,但它告訴我,我有兩個選擇:

  • 使用ORM(如實體框架或小巧玲瓏)
  • 在ADO.NET
  • 完全 寫它

實體框架很簡單,但似乎一旦生成模型,EF就不會允許我更改其目標數據庫引擎。 OTOH在ADO.NET中編寫了許多DAL(每個目標引擎都有一個DAL),這使我具有了這種靈活性,但是我一直從頭開始編寫所有的東西。

所以,我有以下問題:

  1. 有沒有一種方法,使EF再跟上運行不同的數據庫引擎?
  2. 如果沒有,是否有任何支持多個數據庫引擎的成熟,穩定的ORM?

在此先感謝。

+0

我不確定你的意思是「在運行時」和「在飛行中」。除了實體框架,Dapper和核心ADO.NET,NHibernate是另一種選擇。 它幾乎支持所有常用的數據庫。它有助於將數據訪問層與業務邏輯或應用程序層分開。它被廣泛使用和積極開發。負面的一點是它的學習曲線。 –

回答

0

看起來它可能與實體框架 - Same EDMX file for different Providers

但是,對我來說這聽起來像一個災難。我會使用ANSI SQL自己編寫它,確保所有數據庫中的表,列和數據類型匹配並具有相同的行爲 - 以及外鍵,自動密鑰生成等。然後測試所有內容並跨越我的手指。

+0

所以我幾乎堅持使用ADO.NET和ANSI SQL?幸運的是,我不需要使用許多特殊功能(最多可以在任何情況下都可以在DAL後面提取視圖和存儲過程)。我唯一會想念的是EF對FK的支持。 –

相關問題