尝试使用EFCore替代EF 6,我很难理解在使用依赖注入来管理我的DB上下文时数据库生命周期是如何发生的。
在EF 6中,我习惯于手动打开连接并利用using语句来使用其dispose方法。在这种情况下,数据库生命周期的反应对我来说似乎很清晰。
使用EFCore,建议的方式是在启动时将数据库上下文类添加为服务。
然后通过依赖注入在控制器中获取上下文。
以这种方式,连接池是何时开始的?我的连接何时打开,它的寿命是多久?它是在应用程序启动时打开并在停止时关闭吗?如果使用MVC,它会在控制器方法被调用时打开吗?在活动查询时呢?
我在SF Core 2.0文档中找到了一个简短的参考提示,介绍了DBContext池背后正在发生的事情。
“在ASP.NET Core应用程序中使用EF Core的基本模式通常涉及将自定义DbContext类型注册到依赖注入系统中,并通过控制器中的构造函数参数获取该类型的实例。这意味着为每个请求创建一个新的DbContext实例。”
请问有人可以帮我理解使用此模式时数据库连接的生命周期吗?如果这是一个重复的问题,请帮忙标记并指向我详细阅读的地方。我已经花了一些时间进行研究,但似乎所有我能找到的文章都只是概述,或者我可能用错了关键词。
在EF 6中,我习惯于手动打开连接并利用using语句来使用其dispose方法。在这种情况下,数据库生命周期的反应对我来说似乎很清晰。
(using var db = new DatabaseContext())
{}
使用EFCore,建议的方式是在启动时将数据库上下文类添加为服务。
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
然后通过依赖注入在控制器中获取上下文。
private readonly ApplicationDbContext context;
public HomeController(ApplicationDbContext context, ILogger<HomeController> logger)
{
this.context = context;
}
以这种方式,连接池是何时开始的?我的连接何时打开,它的寿命是多久?它是在应用程序启动时打开并在停止时关闭吗?如果使用MVC,它会在控制器方法被调用时打开吗?在活动查询时呢?
我在SF Core 2.0文档中找到了一个简短的参考提示,介绍了DBContext池背后正在发生的事情。
“在ASP.NET Core应用程序中使用EF Core的基本模式通常涉及将自定义DbContext类型注册到依赖注入系统中,并通过控制器中的构造函数参数获取该类型的实例。这意味着为每个请求创建一个新的DbContext实例。”
https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0
这是否意味着对于控制器的默认请求,无论我是否使用它,数据库上下文都会在请求管道中打开?假设当请求返回时它被关闭。请问有人可以帮我理解使用此模式时数据库连接的生命周期吗?如果这是一个重复的问题,请帮忙标记并指向我详细阅读的地方。我已经花了一些时间进行研究,但似乎所有我能找到的文章都只是概述,或者我可能用错了关键词。