在我遇到的一个 Web 应用程序中,我发现以下代码在处理 LinqToSQL 时处理 DataContext
public partial class DbDataContext
{
public static DbDataContext DB
{
get
{
if (HttpContext.Current.Items["DB"] == null)
HttpContext.Current.Items["DB"] = new DbDataContext();
return (DbDataContext)HttpContext.Current.Items["DB"];
}
}
}
然后稍后引用它:
DbDataContext.DB.Accounts.Single(a => a.accountId == accountId).guid = newGuid;
DbDataContext.DB.SubmitChanges();
我一直在研究处理 Linq To SQL 时的最佳实践。
我不确定在处理 DataContext 不是 ThreadSafe 并保留其静态副本时所采取的方法。
这是在 Web 应用程序中采用的好方法吗?
@Longhorn213 - 根据你所说的以及我对 HttpContext 的了解越多,我认为你是对的。但在我继承的应用程序中,这是令人困惑的,因为在每个方法的开头,他们都会重新查询数据库以获取信息,然后修改数据上下文的实例并提交对其的更改。
由此看来,我认为应该劝阻这种方法,因为它给人一种错误的印象,即数据上下文是静态的并且在请求之间持续存在。如果未来的开发人员认为在方法开始时重新查询数据是因为他们认为数据已经存在,那么他们可能会遇到问题并且不明白为什么。
所以我想我的问题是,在未来的开发中是否应该阻止这种方法?
这不是静态副本。请注意,该属性从 Context.Items 中检索它,这是每个请求的。这是 DataContext 的每个请求副本,可通过静态属性访问。
另一方面,此属性假设每个请求只有一个线程,这可能不会永远成立。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)