DbContext和连接池

MrB*_*liz 6 .net c# sql-server entity-framework dbcontext

在我继承的应用程序中,这是在基本控制器中,应用程序中的每个其他控制器都继承自.

public BaseController()
    {
        db = new MyDbContext();

        db.Database.Log = s => Debug.Write(s);
    }

 public MyDbContext()
        : base("name=MyDbContext")
    {
        // hack to force Visual Studio to deploy the Entityframework.SqlServer package 
        var instance = SqlProviderServices.Instance;
    }
Run Code Online (Sandbox Code Playgroud)

由于应用程序的设计方式,每个请求至少创建2个上下文.(这是一个MVC应用程序,每个页面都调用HomeController以及为特定页面调用其他控制器.)

我的问题是什么时候DbContext创建到SQL Server的连接?是在创建上下文时,还是仅在执行查询时?

如果它是前者,那么我将使用两倍于SQL服务器的连接数量而不是需要的数量,如果是后者那么它可能不是太大的问题.

我不认为我能在不久的将来重构这一点,当然也不是没有道理的.我应该注意这个设计有哪些潜在的缺陷?

实体框架6.1.3

sst*_*tan 5

因为您不尝试自己在上下文的构造函数中创建和传递连接,所以,是的,正如其他人所说,EF 将根据需要从连接池获取/释放连接,而不是在构造连接时。

请注意 EF 文档中的这段引用:

连接

默认情况下,上下文管理与数据库的连接。上下文根据需要打开和关闭连接。例如,上下文打开一个连接来执行查询,然后在处理完所有结果集后关闭该连接。

在某些情况下,您希望更好地控制连接的打开和关闭时间。例如,在使用 SQL Server Compact 时,打开和关闭同一连接的成本很高。您可以使用 Connection 属性手动管理此过程。

请参阅以下链接了解更多信息:

https://msdn.microsoft.com/en-us/data/jj729737

https://msdn.microsoft.com/en-us/data/dn456849