2013-03-11 55 views
0

我有一條是大幹快上Application_Start播種演示數據到我的數據庫運行的代碼,但我發現了一個異常說:的Application_Start超時?

的ObjectContext的實例已設置,並且可以不再用於經營需要連接

雖然試圖枚舉我的實體之一DB.ENTITY.SELECT(x => x.Id == value);

我檢查了我的代碼,我不是我手術前處置我的背景下,下面是我目前實現的輪廓:

protected void Application_Start() 
{ 
    SeedDemoData(); 
} 

public static void SeedDemoData() 
{ 
    using(var context = new DBContext()) 
    { 
     // my code is run here. 
    } 
} 

所以我在想,如果Application_Start已超時,並迫使我的分貝範圍內完成之前關閉其連接。

注:我知道代碼,因爲我在不同的地方使用它,它是單元測試,並在那裏工作沒有任何問題。

有什麼想法可能是這裏的問題?或我錯過了什麼?

+0

該錯誤通常意味着您正在訪問某個對象中的一些延遲加載的屬性,該對象在您處理上下文的地方從EF中提取。你確定異常是從你的SeedDemoData函數中拋出的嗎? – Mikeb 2013-03-11 18:18:51

+0

您是否嘗試過加入'ToList()'內查詢'SeedDemoData()'只是爲了確保上下文設置之前,你的查詢叫什麼名字? – Khan 2013-03-11 18:22:34

+0

是的,異常來自我的SeedDemoData(),我試圖做的是將DB.ENTITY.SELECT(x => x.Id ==值)移動到執行中的第一行,它可以工作,但假如真有別的此之前我的上下文中執行它會吹,任何其他的想法? – 2013-03-11 19:25:44

回答

0

經過幾個小時調查問題後,我發現它是由數據上下文在不同的線程上有掛起更改引起的。我們目前實施的數據庫升級/遷移上的並行線程來我們App_Start方法運行,所以我注意到,我試圖枚舉實體正被改變的同時,即使他們正在不同的數據運行上下文EF被注意到,在訪問實體返回不正確的錯誤消息,而實際的例外是實體狀態被修改,但不保存在DataContext設置什麼是錯的。

我的問題的實際解決方案是將所有種子數據函數移動到數據庫升級/遷移腳本,以便實體只在當時在一個位置進行修改。

相關問題