2017-02-23 39 views
0

當在實體框架中使用using語句時,它在函數返回之前是否進行處理?使用語句邏輯的實體框架

例如,說我有這樣的事情

public ActionResult test() 
{ 
    using (var empDb = new empEntities()) 
    { 
    var mod = (from emps in empDb.employees 
       select emps); 
    return View(mod); 
    } 
} 

是否返回查看(MOD)之前的實體using語句處置;還是直到視圖關閉纔打開?

+0

是的。在將模型傳遞給視圖之前,您應該實現您的模型。傳遞一個IQueryable視圖是不好的,因爲在渲染視圖的時候,你是對的,這個上下文已經被拋棄了。該視圖不應該調用數據庫(如果您將它傳遞給IQueryable,將會發生這種情況)。您可以使用依賴注入來處理具有請求範圍預期壽命的上下文(我使用ninject進行此操作),並且此問題會消失,但我仍然不願意將非實例化查詢交給視圖。 – spender

回答

0

通常,當您使用IDisposable對象時,using語句以正確的方式調用對象上的Dispose方法,並且一旦Dispose被調用,它也會導致對象本身超出範圍。在使用區塊內。 使用語句確保即使在對象上調用方法時發生異常,也會調用Dispose。將對象放在try塊中,然後在finally塊中調用Dispose,可以獲得相同的結果;實際上,這是編譯器如何翻譯using語句。