Asp.net-Mvc

關於 Rob Conery 的儲存庫模式的一些問題

  • December 2, 2018

閱讀答案後,請在問題末尾閱讀我的更新:

我正在嘗試應用Rob Conery他的部落格MVC Storefront ”下描述的儲存庫模式。但是我想問一下我在應用這種設計模式之前遇到的一些問題。

Rob 製作了自己的“模型”並使用一些 ORM“LINQ to SQL 或實體框架 (EF)”將他的數據庫映射到實體。

然後他使用了自定義儲存庫,在這些儲存庫中,他在 ORM和他的****類IQueryable<myModel>之間進行了某種 映射或“解析” 。Entities``Model

我在這裡問的是:

**是否可以在 ORMEntities和我的模型“ classes”之間進行自定義映射並僅載入我想要的屬性?**我希望這一點很清楚。

POCO 更新

**

這是我在許多建議和許多嘗試後決定的:

**

畢竟,關於 Rob Conery 先生的意見,我有更好的解決方案:

  1. 我將模型建構為“ POCOs”並將它們放在我的“模型層”中,因此它們與“edmx”文件無關。
  2. 建立我的儲存庫來處理這個“ POCO”模型依賴於“ DbContext
  3. 然後我創建了一個“ ViewModels”來從這些儲存庫中獲取視圖所需的資訊。

所以我不需要“EF 模型”和“我的模型”之間**再添加一層。**我只是稍微扭曲我的模型並強制 EF 處理它。

正如我所見,這種模式比 Rob Conery 的模式要好。

是的,如果您使用的是 LINQ to SQL,這是可能的。您需要做的就是使用投影將您想要的數據提取到您選擇的對像中。您不需要所有這些帶有介面和諸如此類的裝飾 - 如果您使用特定於視圖的模型(聽起來像您需要的) - 創建一個 ViewModel 類。

我們稱之為 ProductSummaryView:

public class ProductSummaryView{
  public string Name {get;set;}
  public decimal Price {get;set;}
}

現在從儲存庫中載入它:

var products= from p in _repository.GetAllProducts
             where p.Price > 100
             select new ProductSummaryView {
                 Name=p.ProductName,
                 Price=p.Price

             }

這將提取價格 > 100 的所有產品並返回 IQueryable。此外,由於您只要求兩列,因此在 SQL 呼叫中將只指定兩列。

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