gpt4 book ai didi

asp.net-mvc - 为 MVC Controller 声明 DbContext

转载 作者:行者123 更新时间:2023-12-01 10:49:27 25 4
gpt4 key购买 nike

查看一些在线 MVC 示例,我发现通常在 Controller 中,DbContext 变量被声明为私有(private)成员变量(即全局变量)并且可供所有方法访问。

但是,我最近看到一篇关于 ASP.NET Identity 的文章,并注意到在 Controller 中,DbContext 被声明为在每个方法中(这需要它)。

这种方法有安全优势吗?也许限制安全对象的生命周期以获得更好的整体安全性?!?!

如果不是,那么我认为第一种方法更有效,其中数据库上下文在 Controller 加载时实例化。

以下是我能找到的关于 DbContext 的所有信息,但没有任何内容可以真正回答我的问题。

DbContext declaration - Framework 4.1 - MVC 3.0

MVC, DbContext and Multithreading

最佳答案

在每次请求时,都会构造一个新的 Controller 实例。因此,就所有意图和目的而言,dbcontext 是在构造函数中实例化还是封装在任何给定方法中并不重要。

除了样式选择之外,在给定方法中声明和包含 dbcontext 的原因是:

  • 不需要它的方法不会实例化上下文,从而消除了开销(如果有的话)。这也可以使用惰性初始化模式来完成。
  • 上下文会在方法完成后立即处理,而不是在请求结束时处理。一般来说,这不应该是一个问题;通常,如果用户等待的时间超过几秒钟,你就会遇到更大的问题。
  • 不同的方法使用不同的上下文。

除其他外,声明单个上下文并实例化一次的一些原因:

  • 您只有一个地方可以实例化上下文,而不是很多。在典型的应用程序中,大多数页面无论如何都需要来自数据库的一些信息。
  • 调用其他方法的方法不会各自保留它们自己的上下文对象实例。
  • 您可以创建一个基 Controller 类,该类默认创建一个 dbcontext 对象,允许您在所有继承的 Controller 中保持 DRY。

关于asp.net-mvc - 为 MVC Controller 声明 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22140048/

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