gpt4 book ai didi

c# - 静态数据库上下文的困惑

转载 作者:行者123 更新时间:2023-12-02 21:35:38 25 4
gpt4 key购买 nike

我设置了我的 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();
}

这样,在我的整个系统中,我可以像 DbContext.Db.xxxx

一样访问 Db

到目前为止,一切都在本地运行得很好,但是,我还没有在生产环境中对多个用户进行测试。

我的担忧...

I read this post on stackoverflow现在我担心多个用户访问静态上下文可能会出现数据问题。这应该让我担心吗?或者我的设置方式是否正确?

最佳答案

设置没问题...

我的解决方案不使用静态 DbContext。 DbContext(或任何需要的内容)存储在 HttpContext.Current.Items 集合中(这是当前特定的 HTTP 请求),并且该属性相当于一个方法调用,该方法调用将从这里检索上下文集合并在需要时实例化它。选择这个集合是因为​​它的安全性,而且事实上它很容易从任何地方(即从 Application_EndRequest 事件)引用它,因此我们可以在完成后处理它。

与您链接的帖子有很大不同,因为它描述了您使用静态字段的情况。该字段显然会在所有用户之间共享,这将是一个大问题。

关于c# - 静态数据库上下文的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21439669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com