Asp.net-Mvc
關於 Rob Conery 的儲存庫模式的一些問題
閱讀答案後,請在問題末尾閱讀我的更新:
我正在嘗試應用Rob Conery在 他的部落格“ MVC Storefront ”下描述的儲存庫模式。但是我想問一下我在應用這種設計模式之前遇到的一些問題。
Rob 製作了自己的“模型”並使用一些 ORM“LINQ to SQL 或實體框架 (EF)”將他的數據庫映射到實體。
然後他使用了自定義儲存庫,在這些儲存庫中,他在 ORM和他的****類
IQueryable<myModel>之間進行了某種 映射或“解析” 。Entities``Model我在這裡問的是:
**是否可以在 ORM
Entities和我的模型“classes”之間進行自定義映射並僅載入我想要的屬性?**我希望這一點很清楚。POCO 更新
**
這是我在許多建議和許多嘗試後決定的:
**
畢竟,關於 Rob Conery 先生的意見,我有更好的解決方案:
- 我將模型建構為“
POCOs”並將它們放在我的“模型層”中,因此它們與“edmx”文件無關。- 建立我的儲存庫來處理這個“
POCO”模型依賴於“DbContext”- 然後我創建了一個“
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 呼叫中將只指定兩列。