Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否将LINQ上下文存储为请求变量?_C#_Asp.net_Linq To Sql_Request - Fatal编程技术网

C# 是否将LINQ上下文存储为请求变量?

C# 是否将LINQ上下文存储为请求变量?,c#,asp.net,linq-to-sql,request,C#,Asp.net,Linq To Sql,Request,这是在一个http请求期间使用LINQ上下文的好方法吗?在几乎每一个请求中,我都会从数据库中进行一些选择和一些插入/更新。这是可行的,但我不知道在服务器流量大和负载平衡的情况下,这将如何工作,有人对这种方法有什么看法/想法,以便在请求的整个生命周期内保持上下文 public static AccountingDataContext Accounting { get { if (!HttpContext.Current.Items.Contains("Account

这是在一个http请求期间使用LINQ上下文的好方法吗?在几乎每一个请求中,我都会从数据库中进行一些选择和一些插入/更新。这是可行的,但我不知道在服务器流量大和负载平衡的情况下,这将如何工作,有人对这种方法有什么看法/想法,以便在请求的整个生命周期内保持上下文

public static AccountingDataContext Accounting
{
    get
    {
        if (!HttpContext.Current.Items.Contains("AccountingDataContext"))
        {
            HttpContext.Current.Items.Add("AccountingDataContext", new AccountingDataContext(ConfigurationManager.ConnectionStrings["SQLServer.Accounting"].ConnectionString));
        }
        return HttpContext.Current.Items["AccountingDataContext"] as AccountingDataContext;
    }
}

我使用Unity进行依赖注入,但想法是一样的:

protected void Application_BeginRequest() {
    var childContainer = this.Container.CreateChildContainer();
    HttpContext.Current.Items["container"] = childContainer;
    this.ControllerFactory.RegisterTypes(childContainer);
}

protected void Application_EndRequest() {
    var container = HttpContext.Current.Items["container"] as IUnityContainer;

    if (container != null) {
        container.Dispose();
    }
}

容器负责设置许多内容,其中之一是数据上下文。工作起来很有魅力。我还没有做负载平衡,但也不能想象你会遇到问题。请求获取自己的上下文,即包装连接到数据库的单个用户。使用老式ADO.NET进行数据访问没有什么不同。

在某些层面上,这通常是个好主意。但您可能希望将实例化从Begin_请求事件推回。使用集成管道,您将为站点的每个请求初始化一个相当昂贵的DB上下文。包括favicon.ico、所有样式表和所有图像

最好的,简单的实现,只有当某个东西需要上下文时才实例化它;您可以用适当的位替换它来实例化L2S上下文