gpt4 book ai didi

c# - DbContext 和连接池

转载 作者:太空狗 更新时间:2023-10-29 21:27:16 24 4
gpt4 key购买 nike

在我继承的应用程序中,基本 Controller 中有这个,应用程序中的每个其他 Controller 都继承自该 Controller 。

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;
}

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

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

如果是前者,那么我将使用 2 倍于需要的 SQL Server 连接数,如果是后者,那么这可能不是什么大问题。

我不认为我可以在不久的将来重构它,当然不是没有理由的。我应该注意这种设计的哪些潜在缺陷?

Entity Framework 6.1.3

最佳答案

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

请注意 EF 文档中的这句话:

Connections

By default, the context manages connections to the database. The context opens and closes connections as needed. For example, the context opens a connection to execute a query, and then closes the connection when all the result sets have been processed.

There are cases when you want to have more control over when the connection opens and closes. For example, when working with SQL Server Compact, opening and closing the same connection is expensive. You can manage this process manually by using the Connection property.

有关详细信息,请参阅以下链接:

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

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

关于c# - DbContext 和连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941513/

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