C# ASP.NET请求。。。如何处理Linq数据上下文?

C# ASP.NET请求。。。如何处理Linq数据上下文?,c#,.net,asp.net,linq-to-sql,C#,.net,Asp.net,Linq To Sql,对不起,如果这是重复的。请给我指出适当的问题,如果这是,但我找不到确切的我要找的 因此,我在ASP.NET web应用程序中使用Linq to SQL数据上下文进行实体跟踪和持久化。它适用于一次没有大量用户的Intranet应用程序。现在我正在会话状态下存储datacontext,这让我感觉脏兮兮的!似乎我需要上下文始终存在,因为我需要保留对正在修改的实体的更改跟踪。我们所有的屏幕都有一个保存按钮,该按钮将在DataContext上调用SubmitChanges(),并将所有挂起的更改保留在内存

对不起,如果这是重复的。请给我指出适当的问题,如果这是,但我找不到确切的我要找的

因此,我在ASP.NET web应用程序中使用Linq to SQL数据上下文进行实体跟踪和持久化。它适用于一次没有大量用户的Intranet应用程序。现在我正在会话状态下存储datacontext,这让我感觉脏兮兮的!似乎我需要上下文始终存在,因为我需要保留对正在修改的实体的更改跟踪。我们所有的屏幕都有一个保存按钮,该按钮将在DataContext上调用SubmitChanges(),并将所有挂起的更改保留在内存中


我应该存储DataContext吗?我是否应该在每个请求结束时处理它,然后以某种方式重新创建它并获得挂起的更改?如果我每次都要重新创建它,我不明白如果没有对每个请求进行大量冗余的数据库点击,上下文怎么会知道发生了什么变化。

首先,我要说的是,停止将内容放在会话中。特别是如果用户不多,只需在需要时加载数据即可


根本不存储数据上下文。只要在需要的时候在每一页上创建一个新的。当他们点击Save按钮时,重新创建数据上下文,从数据库加载对象,根据表单输入进行必要的更改,然后将其保存回数据库。每个对象只需点击两次数据库,一次加载,一次保存

我认为数据上下文的最佳实践是工作单元模式,其中工作单元的范围是您正在服务的单个请求。每次需要进行更改时,实例化一个新的数据上下文。如果您担心在绘制上一页后重写已更改的内容,则考虑在隐藏字段中使用和保留版本/时间戳,并在检索实体更新时与数据上下文返回的数据进行检查。

也许我不完全理解工作模式的单位,但它的要旨不就是跟踪所有添加、更新和删除的实体吗?那么,如果每次进行更改时都要重建DataContext,那么DataContext是如何实现的呢?在web请求的上下文中,工作单元将应用于单个请求,而不是跨请求。获取请求的数据,进行任何更改/插入/删除以服务请求,然后处理上下文。我将澄清我的答案。工作单元就像一个事务——创建您的工作单元,将引用传递给正在使用的存储库,然后在完成后调用相应的“提交”。Linq2SQL本机支持这个概念,因为它跟踪您的所有更改…我想给您和tv一个正确答案复选框。。。你是第一个!