2014-06-25 63 views
0

使用Razor在html中嵌套實體框架查詢是一個好主意嗎? 看我下面的例子:在Razor中嵌套實體框架查詢是否是一種好的做法?

<span class="block m-t-xs"> 
     <strong class="font-bold"> 
       @{ 
       var item = HttpContext.Current.User; 
       MyApp.Models.DBContext db = new MyApp.Models.DBContext(); 
       string loggedInUser = db.Users.FirstOrDefault(u => u.Email == item.Identity.Name).FullName; 
       } 
       @loggedInUser 
     </strong> 
</span> <span class="text-muted text-xs block">Art Director <b class="caret"></b></span> 

我得到我想要的結果,但有些事在我的頭說,這是不好的做法。

我遇到的一個例子顯示實體框架查詢在像這樣的視圖頂部。我假設這是有意義的,如果我需要在整個頁面中對多個查詢使用上下文訪問權限,那麼不需要創建DbContext的多個實例。

@using NorthwindModel; 
@{ 
    Layout = "~/_SiteLayout.cshtml"; 
    Page.Title = "Welcome to my Web Site!"; 
    var db = new NorthwindEntities(); 
    var products = db.Products.Where(p => p.CategoryID == 2); 
    var grid = new WebGrid(products); 
} 
<div> 
    @grid.GetHtml() 
</div> 

或者我應該總是嘗試儘可能地將數據作爲ViewModel傳遞?請注意,我的第一個示例用於部分視圖。

所有的建議是非常受歡迎的。感謝您的時間。

+1

這聽起來像是違反了關注點分離。 –

+0

@ DanielA.White對不起,你的意思是什麼?新手程序員在這裏。 – RobHurd

+0

http://en.wikipedia.org/wiki/Separation_of_concerns –

回答

1

  1. 在評論中所指出的關注,但原因爲何分離分離關注點是好的:

  2. 遺址可測試性。 MVC控制器設置爲無需查看或瀏覽器即可輕鬆測試;測試這是非常困難的,不必要的困難。

  3. 吹動它的任何機會async

  4. 使頁面難以重用;例如,我們經常使用我們在網絡上使用的Views,並將它們發送到電子郵件發送功能。通常情況下,您想要傳遞一個稍微不同的模型,或者由於您按順序發送大量電子郵件而批量提取某個模型。沒辦法在這裏通過。

  5. 讓更多的編碼人員更加努力工作;例如,如果您稍後有一個HTML & CSS人員正在處理您的項目,那麼將他們交給Razor頁面是他們可能理清的。像這樣向他們傳遞一個頁面是大量的C#代碼,他們會很困惑並且可能會破壞。

關注的良好分離的目標是與代碼的高度可組合落得 - 有大部分的情況下通過了許多地方,這樣他們就可以在多個新場景較少重寫被重用。

+0

謝謝克里斯。感謝您的意見。 – RobHurd

相關問題