最初,我使用我的DataContext對象作爲全局單例。當在ASP.Net中使用它時,由於ASP.Net的多線程性質,我遇到了爭用問題。LINQ-to-SQL業務層對象DataContext
所以我做了一些更好的選擇,並找到了關於「每個對象」場景的Rick Strahl's post。所以我的每個對象都有一個DataContext,它是本地的。
所以我大部分都想通了,但是當我試圖獲得對象的一個實例時出現了我的問題。由於所有的方法都是實例方法,所以我需要首先獲取類的實例。然後我可以使用該實例調用實例方法來獲取我想要的對象。
事情是這樣的..
Customer cust = new Customer();
cust = cust.GetCustomer(primaryKeyID); // gets data using LINQ-To-SQL
這完全是多餘的我創建類的實例只是調用一個方法返回,我想實際的實例。這是做這件事的正確方法嗎?我認爲有一種不同的方式仍然堅持裏克在他的博客文章中使用的方法。
Sample類代碼:
public partial class Customer
{
MyDataContext db = new MyDataContext(Settings.MyConnectionString);
public Customer GetCustomer(Int64 custID)
{
return db.Customers.SingleOrDefault(c => c.ID == custID);
}
public Customer AddCustomer(Customer c)
{
db.Customers.InsertOnSubmit(c);
db.SubmitChanges();
}
}
默認情況下,LINQ到SQL打開和關閉它自己的連接。 http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/90dc4a62-7316-4791-9db8-056c21153b84/ 你可以通過評估'db.Connection.State'來測試它。查詢執行後關閉。見圖http://img690.yfrog.com/img690/1577/124201094248am.png – 2010-01-24 14:44:55
@ Eclipsed4utoo:有趣。對'SingleOrDefault()'的調用必須允許。但是,如果你返回一個IEnumerable的中途,我不認爲LINQ會知道足夠的關閉連接。所以使用'使用'是一個好習慣 – Andomar 2010-01-24 15:19:51