我知道一种使用上下文的方法是通过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
语句附带的处置属性。真的吗?随时建议其他方法。
答案 0 :(得分:1)
注入它我失去了using语句附带的处置属性。真的吗?
否:
AddDbContext扩展方法向DbContext类型注册一个 默认范围内的生存期。
当范围(这里是HttpRequest)结束时,将置位Scoped Lifetime对象。