我在这里找到关于stackoverflow的帖子之后,对我的DbContext进行了建模。
这是当前设置...
public static class DbContext
{
public static MyDbContext Db
{
get
{
if (!HttpContext.Current.Items.Contains("_db"))
{
HttpContext.Current.Items.Add("_db", new MyDbContext());
}
return HttpContext.Current.Items["_db"] as MyDbContext;
}
}
}
上下文在end_request上的global.asax中进行处理,如下所示:
void Application_EndRequest(object sender, EventArgs e)
{
var db = (MyDbContext)HttpContext.Current.Items["_db"];
if (db != null)
db.Dispose();
}
这样,在整个系统中,我都可以像访问Db一样 DbContext.Db.xxxx
到目前为止,一切都对我来说本地运行良好,但是,我还没有在生产环境中对多个用户进行测试。
我的顾虑...
我阅读了有关stackoverflow的文章,现在我担心多个用户访问静态上下文可能会出现数据问题。这应该让我感到关注还是可以让我进行设置?
设置没问题...
我的解决方案不使用静态DbContext。DbContext(或所需的任何内容)存储在HttpContext.Current.Items
集合中(这是当前特定的HTTP请求),并且该属性等效于方法调用,该方法调用将从该集合中检索上下文并在需要时实例化它。选择该集合是出于其安全性,并且事实上很容易在任何地方(即从Application_EndRequest事件中)对其进行引用,因此我们可以在完成后将其处置。
您所链接的帖子有很大的不同,因为它描述了您使用的情况static field
。该字段显然将在所有用户之间共享,这将是一个大问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句