c# - Global.asax 中 DbContext 的静态字段与 Controller 类中 DbContext 的实例字段?

标签 c# asp.net-mvc entity-framework

坦率地说,我是 C# 和 Asp.net MVC 的新手。 我也不知道 asp.net web 应用程序实际上是如何在幕后的 IIS 和 ASP.NET 框架上运行的。

我对必须在我的 asp.net mvc 应用程序中声明 DbContext 字段(或从 DbContext 派生的任何类)的决定感到困惑。

我有两个选择:

  1. global.asax 中将该字段声明为静态字段,以便所有 Controller 都可以使用它。
  2. 将该字段声明为每个 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/

相关文章:

c# - 如何以编程方式隐藏键盘

c# - 带有一些符号的名称的正则表达式

c# - 在某些行上使用.Distinct()

asp.net-mvc - "Proper"MVC - 我是否应该使用构造函数?

javascript - url 中的特殊字符为 "Bad Request"或 "Illegal characters in path"

asp.net - 什么可能导致函数导入性能缓慢?

c# - FIFO 队列导致 IIS 处理器达到 100% 的最大值

c# - 从程序发送电子邮件

html - 到表格都漂亮的网格线

c# - Ajax.BeginForm 与 A​​SP.NET MVC 4 不调用 Controller 操作