1

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

4

2 回答 2

2

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

Linq to SQL DataContext 生命周期管理

他建议每个请求一个,我已经在一些应用程序中实现了该模式,它对我来说效果很好。

他在文章中谈到了一点......他的快速而肮脏的版本引用了 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,它可以根据您是否在单元测试、Web 应用程序等中运行来确定数据上下文的生命周期.

例子:

public class YourRepository
{

    public YourRepository(IContainer<DataContext> container)
    {

    }

}

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

希望这可以帮助...

于 2009-05-15T06:12:33.443 回答
0

我在每个请求的工作单元上使用并构建了一个管理工作单元生命周期的 IHttpModule,根据请求创建它并在之后处理它。当前工作单元存储在 HttpContext.Current.Items 中(隐藏在 Local.Data 中)。

于 2009-05-20T03:01:08.083 回答