代码之家  ›  专栏  ›  技术社区  ›  zsharp

一页请求中的最大“工作单位”?

  •  1
  • zsharp  · 技术社区  · 15 年前

    不是一个是吗?我有一个方法可以从不同的存储库中获取五个列表。每次调用都会打开和关闭一个新的Datacontext。这样做可以吗?还是应该将所有内容打包到一个数据上下文中。在这种情况下,使用相同的datacontext并不简单,但恐怕在一个页面请求中打开和关闭大量的datacontext是不好的。

    2 回复  |  直到 15 年前
        1
  •  2
  •   bytebender    15 年前

    这是一篇关于这个主题的文章。。。

    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;
            }
        }
    

    例子:

    public class YourRepository
    {
    
        public YourRepository(IContainer<DataContext> container)
        {
    
        }
    
    }
    

    然后替换 HttpContext.Current.Items[DataContextKey] 具有 _Container[DataContextKey]

        2
  •  0
  •   Nigel Sampson    15 年前

    我使用每个请求的工作单元,并构建了一个IHttpModule来管理工作生命周期的单元,根据请求创建它,然后再将其删除。当前工作单元存储在HttpContext.current.Items中(隐藏在Local.Data中)。