我已經研究了一下DataContext的生命週期,試圖找出最好的辦法。Linq to SQL - 我應該如何管理數據庫請求?
鑑於我想在Web應用程序中重新使用我的DAL,我決定使用DataContext按業務對象請求的方法。
我的想法是從dbml文件擴展我的L2S實體以檢索信息,數據庫根據請求創建單獨的上下文,例如,
public partial class AnEntity
{
public IEnumerable<RelatedEntity> GetRelatedEntities()
{
using (var dc = new MyDataContext())
{
return dc.RelatedEntities.Where(r => r.EntityID == this.ID);
}
}
}
在返回實體方面......我需要在這一點上返回波蘇斯還是確定只返回業務對象從查詢返回?我明白,如果我嘗試訪問返回實體的屬性(在DataContext被處置後),它會失敗。然而,這就是我決定實施這些類型的方法的原因,例如
相反的:
AnEntity entity = null;
using (var repo = new EntityRepo())
{
entity = repo.GetEntity(12345);
}
var related = entity.RelatedEntities; // this would cause an exception
從理論上講,我應該能夠做到:
AnEntity entity = null;
using (var repo = new EntityRepo())
{
entity = repo.GetEntity(12345);
}
var related = entity.GetRelatedEntities();
考慮到我的特殊應用程序的情況下(需要在一個窗口服務& Web應用程序的工作),我想知道這是否似乎是一種合理的方法,是否存在明顯的缺陷,以及是否有更好的方法來解決我正在嘗試做的事情。
謝謝。
你想避免哪些線程相關的問題? – Nate 2009-12-17 22:29:28
在這個線程詳細http://www.west-wind.com/weblog/posts/246222.aspx – James 2009-12-17 22:31:43
我從原來的帖子中刪除了這一行,因爲我不想受到太多的阻礙。但基本上我想避免任何衝突,如果我要在多線程環境中訪問我的DAL(如Web應用程序) – James 2009-12-17 22:35:50