2017-10-04 71 views
2

我想在實體框架和Dapper之間創建抽象層。在運行時,我可以選擇實體框架或Dapper,或者我也將它們兩個都包含在內。我知道,我可以使用接口如何在各種ORM(實體框架和Dapper)之間創建抽象層?

public IORM{ 
    Save(); 
    Delete(); 
    //other ORM functions 
} 

public EntityFramework : IORM{ 
    public Save(){ 
    SaveChanges(); 
    } 
    public Delete(){ 
    Remove(); 
    } 
} 


public Dapper: IORM{ 
    public Save(){ 
    //save code goes here 
    } 
    public Delete(){ 
    //delete code goes here 
    } 

但是,這是基本的操作和不知道如何在.NET 2.0的核心方法CofigureServices()配置。

是不同的ORM之間的抽象建議?如果是的話, 在.net 核心2.0中實現Entity framework和Dapper之間的抽象層?

+1

除非應用程序需求需要同時使用sql和nosql數據庫(某種混合使用情況),否則我不會建議抽象ORM的。因此,從當前和未來的需求角度評估用例,如果您的應用程序和整個應用程序完全適用於某種類型的數據庫,則無需進行抽象。 –

+0

請參閱使用Dapper + Dapper Extensions實現Repository和UnitOfWork的示例代碼。 stackoverflow.com/a/45460483/5779732; stackoverflow.com/a/45029588/5779732 –

+0

我想說,在不同的ORM之間創建抽象層並不是特別有用。這需要相當多的努力,投資回報似乎不大可能。畢竟,你爲什麼要做這個開關? – GlennSills

回答

4

它始終是最好保持分離的擔憂。但是,一個完整的ORM可以隱藏在一個接口定義之後是一種幻想。 ORM的運行時行爲可能會對整個應用程序產生相當大的影響,並且需要很多工作才能「交換」ORM。保持這種能力的原因並不多。 你的動機是什麼?

當然,抽象具體的ORM工作是一個好主意。具體的例子真的取決於你的整體架構,但要提一些要點:

  • 保持模型和控制器的持久性東西(屬性,依賴關係)。
  • 應用存儲庫模式並將存儲庫接口參數注入到應用程序服務中。這樣,您可以隱藏ORM的具體查詢/寫入操作。
  • 應用工作單元模式,並使用Web框架基礎結構爲每個請求透明地處理工作單元。這樣,您可以隱藏ORM的具體事務處理操作。