2009-11-08 25 views
3

我似乎得到了很多這在我的LINQ的2 SQLLINQ:DataContext的生命和System.Data.SqlClient.SqlException:超時過期

System.Data.SqlClient.SqlException:超時過期。操作完成之前超時的時間或服務器沒有響應。

真的沒有理由,它是一個簡單的查詢,返回1條記錄。

我想每個需要它的方法的使用語句中打開我的datacontext,我目前使用私有模塊級變量打開的DataContext ..

是這個建議?

我不明白爲什麼它會超時,我只能認爲我身邊有太多的數據上下文....

任何想法?

回答

1

在DataContext被設計成當你使用它時被打開,然後被扔掉。例如:

using (var dc = new MyDataContext()) 
    dc.sp_DailyJob(); 

using塊後立刻在DataContext被釋放回連接池。

現在,如果您將DataContext緩存在本地模塊中,它可能會暫時未使用。然後SQL Server最終會關閉你的連接,因爲它閒置太久了。下一個呼叫將生成Timeout expired消息。

我想刪除DataContext的緩存,併爲每次運行的調用或查詢創建一個新的DataContext。儘可能快地處理它們。這沒有任何性能開銷,因爲連接被高度優化的連接池緩存。

+0

謝謝Andomar,正是我期待的,這是我的預期..但不確定..謝謝你的確認.. – 2009-11-08 16:24:32

2

這是一個很好的文章here(最佳實踐和Linq中使用的DataContext到SQL的有效途徑)約2 Linq的SQL數據方面的最佳實踐...可能是值得一讀:)

+0

感謝您的鏈接。 – 2009-11-08 16:23:56