它不是一个吗?我有一个从不同的存储库获取五个列表的方法。每次调用都会打开和关闭一个新的Datacontext。这样做是可以的,还是应该将所有内容都包装在一个datacontext中。在这种情况下,使用相同的datacontext并不是直截了当的,但我担心在一个页面请求中打开和关闭大量的datacontext并不好。
答案 0 :(得分:2)
以下是关于该主题的文章......
Linq to SQL DataContext Lifetime Management
他建议每个请求一个,我已经在一些应用程序中实现了这个模式,它对我来说效果很好。
他在文章中谈了一点...他的快速和脏版本引用了System.Web并做了类似的事情:
private TDataContext _DataContext;
public TDataContext DataContext
{
get
{
if (_DataContext == null)
{
if (HttpContext.Current != null)
{
if (HttpContext.Current.Items[DataContextKey] == null)
{
HttpContext.Current.Items[DataContextKey] = new TDataContext();
}
_DataContext = (TDataContext)HttpContext.Current.Items[DataContextKey];
}
else
{
_DataContext = new TDataContext();
}
}
return _DataContext;
}
}
但是他建议你采取下一步并删除对System.Web的引用并使用依赖注入并创建自己的IContainer,它可以根据你是否在单元测试中运行来确定datacontext的生命周期申请等。
示例:
public class YourRepository
{
public YourRepository(IContainer<DataContext> container)
{
}
}
然后将HttpContext.Current.Items[DataContextKey]
替换为_Container[DataContextKey]
希望这会有所帮助...
答案 1 :(得分:0)
我在每个请求的工作单元上使用并构建了一个IHttpModule来管理工作单元生命周期,根据请求创建它并随后将其放置。当前的工作单元存储在HttpContext.Current.Items中(隐藏在Local.Data中)。