使用.NET Core处置和注入DbContext

时间:2019-05-24 21:31:01

标签: entity-framework asp.net-web-api .net-core

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

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

[ApiController]
public class MyController : ControllerBase
{
    [HttpPost]
    public ActionResult PostActionHere(ActionRequestClass request)
    {
        using (var context = new MyEntityFrameworkContext())
        {
         ....
         // use context here
         context.SaveChanges()
         ....
        }
    }
}

我想开始将其注入到我的控制器中。主要是因为我认为使用.NET Core依赖项注入更容易阅读并且更加统一。

[ApiController]
public class MyController : ControllerBase
{
    private MyEntityFrameworkContext _myDb;

    public MyController(MyEntityFrameworkContext myDb)
    {
        _myDb = myDb;
    }

    [HttpPost]
    public ActionResult PostActionHere(ActionRequestClass request)
    {
     ....
     // use context here
     _myDb.SaveChanges()  
     ....      
    }
}

在我的 startup.cs 中:

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

 options.UseSqlServer(Configuration.GetConnectionString("MyEntityFrameworkDatabase")));
}

我担心的是,注射它会失去using语句附带的处置属性。真的吗?随时建议其他方法。

1 个答案:

答案 0 :(得分:1)

  

注入它我失去了using语句附带的处置属性。真的吗?

否:

  

AddDbContext扩展方法向DbContext类型注册一个   默认范围内的生存期。

Configuring a DbContext

当范围(这里是HttpRequest)结束时,将置位Scoped Lifetime对象。