Entity framework 用.NET内核处理和注入DBContext

Entity framework 用.NET内核处理和注入DBContext,entity-framework,asp.net-web-api,.net-core,Entity Framework,Asp.net Web Api,.net Core,我知道使用上下文的一种方法是通过 我在我的控制器中这样使用它 [ApiController] 公共类MyController:ControllerBase { [HttpPost] 公共ActionResult PostActionHere(ActionRequestClass请求) { 使用(var context=new MyEntityFrameworkContext()) { .... //在这里使用上下文 context.SaveChanges() .... } } } 我想开始把它

我知道使用上下文的一种方法是通过

我在我的控制器中这样使用它

[ApiController]
公共类MyController:ControllerBase
{
[HttpPost]
公共ActionResult PostActionHere(ActionRequestClass请求)
{
使用(var context=new MyEntityFrameworkContext())
{
....
//在这里使用上下文
context.SaveChanges()
....
}
}
}
我想开始把它注入我的控制器。主要是因为我认为它更易于阅读,并且与.NET核心依赖项注入更为一致

[ApiController]
公共类MyController:ControllerBase
{
私有MyEntityFrameworkContext_myDb;
公共MyController(MyEntityFrameworkContext myDb)
{
_myDb=myDb;
}
[HttpPost]
公共ActionResult PostActionHere(ActionRequestClass请求)
{
....
//在这里使用上下文
_myDb.SaveChanges()
....      
}
}
在我的startup.cs中:

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyEntityFrameworkContext >(options => 

 options.UseSqlServer(Configuration.GetConnectionString("MyEntityFrameworkDatabase")));
}
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“MyEntityFrameworkDatabase”));
}
我担心的是注入它会丢失使用语句时附带的处置属性。这是真的吗?请随意建议其他方法

注入它会丢失using语句附带的处置属性。这是真的吗

否:

AddDbContext扩展方法将DbContext类型注册为 默认情况下,作用域为生存期


当作用域(这里是HttpRequest)结束时,作用域的生存期对象将被释放。

我从未遇到过手动释放任何DbContext连接的理由。DbContext将在需要时自动处理打开和关闭连接的操作。@RugerSR9 True,但也包括.Net core的DI容器。在该文章中,它指出“但是,任何以并行方式显式执行多个线程的代码都应确保DbContext实例永远不会同时被访问。”这是否意味着具有异步EFCore函数的应用程序需要将作用域更改为瞬态?否。通常,您会等待每个异步调用,因此,尽管DbContext在其生命周期内可能会被不同的线程访问,但它不会同时被多个线程访问。