Dot-Net

將工作單元和儲存庫模式與實體框架一起使用的好處

  • June 30, 2013

根據MSDNDbContext定義為:

表示工作單元和儲存庫模式的組合,使您能夠查詢數據庫並將更改組合在一起,然後將這些更改作為一個單元寫回儲存。

既然DbContext實現了工作單元和儲存庫模式,那麼為什麼我在 Internet 上找到的這個ASP.NET 教程DbContext和其他資源展示瞭如何使用工作單元和儲存庫模式的自定義實現?這不是多餘的嗎?

如果不是,那麼在使用時創建工作單元和儲存庫層的自定義實現有什麼好處DbContext?(我可以看到這在測試項目中是如何有意義的。)

是的,DbContext代表一個工作單元並DbSet代表一個儲存庫,但是有些人會在它們之上創建一個抽象層。以下是人們可能這樣做的一些原因:

  • 也許他們不希望他們的項目與實體框架及其架構緊密耦合。因此,他們將實體框架隱藏在這些抽象背後,以便他們可以用實體框架替換任何其他 ORM,而無需對數據訪問層的介面進行任何修改。
  • 他們使用儲存庫來明確某些實體允許哪些操作。*(例如,CustomerRepository可能允許添加和更新客戶,但不允許刪除他們)。*另一方面,它使客戶端開發人員能夠輕鬆辨識某些實體的可用操作。換句話說,他們創建具有與領域語言兼容的命名約定和介面的儲存庫。
  • 將與數據庫相關的操作移動到儲存庫允許您攔截這些操作並執行日誌記錄、性能調整或任何其他您想要的操作。
  • 有些人這樣做是為了使測試更容易。假設我有一個ICustomerRepository包含三種方法的介面。然後我可以輕鬆地模擬它,而不是IDbSet<Customer>用太多的方法來模擬。
  • 最後,有許多人沒有DbContext在和上創建抽象DbSet。他們只是直接使用它們,這樣做是完全有效的。

引用自:https://stackoverflow.com/questions/17390545