.NET在控制器上处理DBContext处理操作

时间:2017-12-27 12:26:40

标签: c# .net entity-framework

我想知道我做这种工作是否正确?

这是一个简单的例子。

public class HomeController : Controller
{
    MYDBContext db = new MYDBContext();

    public ActionResult Index()
    {
        //do some thing with db here
        return View("~/Views/Home/Index.cshtml");
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
}

所以,我正在控制器的顶部创建一个db对象。在控制器处理时将其丢弃?

我想知道是否因为未关闭的数据库连接而导致内存泄漏?

编辑:这是一个MVC项目。

1 个答案:

答案 0 :(得分:1)

就数据库连接问题而言 .NET为您在应用程序中使用的每个连接字符串维护一个连接池, 出于性能原因(因为打开和关闭连接通常在性能方面可能是昂贵的)。 该池具有特定的最小和最大大小(由MinPoolSize和MaxPoolSize连接字符串参数控制)。 当你打开一个连接(通过SqlConnection.Open) - 它可能会从池中取出而不是真的重新打开。 当您关闭连接时(也通过处理EF上下文完成) - 连接可能会被放入池中,而不是真正关闭。 当连接空闲一段时间后,它可能会从池中删除。