坦率地说,我是 C# 和 Asp.net MVC 的新手。 我也不知道 asp.net web 应用程序实际上是如何在幕后的 IIS 和 ASP.NET 框架上运行的。
我对必须在我的 asp.net mvc 应用程序中声明 DbContext 字段(或从 DbContext 派生的任何类)的决定感到困惑。
我有两个选择:
- 在
global.asax
中将该字段声明为静态字段,以便所有 Controller 都可以使用它。 - 将该字段声明为每个 Controller 类中的实例字段。
你能解释一下哪一个是正确的吗?确实需要更详细的解释。
最佳答案
如果在 global.asax 中将其设为静态字段,则会遇到并发问题。来自多个请求的多个线程可以进来并获取彼此的数据。更糟糕的是,在您开始在网站上获得更多流量或开始负载测试之前,这不会显示出来。你将把它作为一个单例来实现,在你的测试中一切都会很好地工作,你会想,“我是个天才!看看这个实现有多干净!”但总有一天,你会像我一样被这个烧毁。结果将变得困惑,用户将开始看到不属于他们的数据,网站将出现意外行为。
Entity Framework 和 LINQ to SQL 的上下文类被设计为轻量级实例化,您可以为要运行的每组查询设置这些实例。它并不意味着长寿。
Check out this other Stack Overflow question / answer on the same topic, worded differently.
关于c# - Global.asax 中 DbContext 的静态字段与 Controller 类中 DbContext 的实例字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4847892/