C# 是否将LINQ上下文存储为请求变量?
这是在一个http请求期间使用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
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上下文