使用SQLSERVER 2008 R2,2010 VisualStudio的最佳實踐,.NET 4.0「服務器無法恢復交易」 - 使用LINQ to類
我得到這個時期的異常:「服務器無法恢復交易 - 說明2000003 「(數字變化)
閱讀在線論壇,在這裏,我發現主要的原因是正確實例並關閉連接。
我的課程應該是什麼樣子?
在Class級別創建DataContext並在所有方法上使用它?
public class BusProcess
{
RENDBDataContext db = new RENDBDataContext();
public void Insert()
{
//Do stuff here...
db.InsertProcedure(...);
}
}
通過使用()在每個方法上創建和配置一個新的DataContext?
public class BusProcess
{
public void Insert()
{
using(RENDBDataContext db = new RENDBDataContext())
{
//Do stuff here...
int sample = db.SomeObject.SingleOrDefault(...).Id;
db.InsertProcedure(...);
}
}
}
或者,也許不同的方法(最佳實踐)
如果我使用SECOND示例,假設該方法返回一個IQueryable <>,那麼我將無法使用該數據,導致DataContext已經處理?而且:爲了處理DataContext,將它的變量設置爲null就足夠了。 –
@Vitor:你說得對,返回的'IQueryable'將失敗,但你可以實現查詢(即調用'ToList'或'ToArray')並返回。簡單地將變量設置爲null對於實現'IDisposable'的類是不夠的:該接口的目的是在完成實例後立即調用Dispose()(例如通過'using')。否則,在GC收集對象(並調用其終結器)之前,其資源不會被清理。 –