我在此处设置了我的DbContext模型after a post here on stackoverflow。
这是目前的设置......
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
到目前为止,我在本地运行的一切都很棒,但是,我还没有在生产环境中测试多个用户。
我的关注......
I read this post on stackoverflow现在让我担心多个用户访问静态上下文时可能会出现数据问题。这应该关注我还是我的设置好的方式?
答案 0 :(得分:5)
设置正常......
我的解决方案不使用静态DbContext。 DbContext(或任何需要的东西)存储在HttpContext.Current.Items
集合中(这是当前特定于HTTP请求的),该属性等同于一个方法调用,它将从此集合中检索上下文并在需要时对其进行实例化。选择这个集合是为了它的安全性,因为它很容易从任何地方(即从Application_EndRequest事件)引用它,所以我们可以在完成后处理它。
您链接的帖子存在很大差异,因为它描述了您使用static field
的情况。该字段显然将在所有用户之间共享,这将是一个大问题。