ASP.NET MVC - Linq to Entities 模型作為 ViewModel - 這是一個好習慣嗎?
真的是快速提問。
我目前正在使用 asp.net MVC 和實體框架建構一個站點。我有幾個儲存庫可以返回實體或實體列表。我發現在我的大部分頁面中,我不得不從各種相關表中提取數據。只要我在查詢中使用“包含”載入相關實體就可以了——但這是一種好的做法嗎?
創建一個只包含我需要的資訊位的自定義視圖模型對象會更好嗎,或者拉一個可能有 5 到 6 個表深的對像圖只是為了在視圖中顯示您需要的內容並沒有任何“錯誤” ?
抱歉,如果這個問題沒有太大意義。我可能從根本上誤解了應該如何在這裡使用模型:)
謝謝
我建議您查看視圖中的渲染程式碼和控制器中的發布程式碼。您採用的方法是否使它們過於復雜?如果不是,您可能可以保持原樣。如果通過引入自定義視圖模型可以大大簡化視圖和控制器程式碼,那麼請考慮創建一個。自定義視圖模型本質上抽象了一些目前可能正在其他地方處理的複雜性。
如果你的觀點開始做類似的事情
<% foreach (var order in Model.Orders.Any(x => x.Products.Any(p => p.Category == "xx")) %>那麼你肯定需要 ViewModel。你可以和
ViewData["flattened_orders"]如果您更喜歡魔術弦,但我對此表示懷疑。
然後,您的實體需要展示屬性的問題,然後您需要公開它們上的所有屬性,以便模型綁定器可以工作……然後您需要額外的僅展示資訊,如國家列表……
因此,對於簡單的應用程序,您可以跳過 ViewModel。但是對於簡單的應用程序,無論如何您都可以執行 Response.Write 和手動 SQL ;-)
我其實很喜歡這篇關於類似問題的文章。那裡所代表的方法一開始可能看起來太“學術”了,但它來自真實的項目,我做的 ASP.NET MVC 越多,我就越喜歡它,也越來越接近它。