gpt4 book ai didi

c# - 在 MVC 中使用数据库连接包装方法

转载 作者:行者123 更新时间:2023-11-30 22:08:52 25 4
gpt4 key购买 nike

我正在关注 MVC music store tutorial我来到了他们使用数据库连接的部分(DbConnectionDbContext 的子级)。我被教导创建这样的方法(用 using 包装):

public class StoreManagerController : Controller
{
//
// GET: /StoreManager/

public ActionResult Index()
{
using(var db = new DbConnection())
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}
}

...
}

但 Visual Studio 为我生成了一个如下所示的 Controller :

public class StoreManagerController : Controller
{
private DbConnection db = new DbConnection();

//
// GET: /StoreManager/

public ActionResult Index()
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}

...
}

我想,Visual Studio 没有错,但为什么我被告知要用 using 包装每个方法,以使连接尽可能短,并让用户使用单独的连接?

最佳答案

我想,Visual Studio 没有错,但为什么我被告知要用 using 包装每个方法

    using(var db = new DbConnection())
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}

db 的范围只保留在大括号内。这也许是 using 关键字在 C# 中的另一个目的。它定义了一个变量的范围,在上面的例子中,它是你的 db 对象。

现在,如果您调试 visual studio 为您生成的代码,您会注意到每次创建 Controller 类的对象或在其他情况下都会调用一个 Dispose 方法换句话说,在相应的 Controller 中调用一个 Action 方法。

由于以下原因,DBContext 实例总是被释放 -

  • 当您将更多对象及其引用加载到内存中时,上下文的内存消耗可能会迅速增加。这可能会导致性能问题。

  • 如果异常导致上下文处于不可恢复状态,则整个应用程序可能会终止。

  • 随着查询数据和更新数据的时间间隔的增加,遇到并发相关问题的几率会增加。

了解更多信息 - Reference

关于c# - 在 MVC 中使用数据库连接包装方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993302/

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