我知道使用上下文的一种方法是通过使用语句。
我像在控制器中一样使用它
[ApiController]
public class MyController : ControllerBase
{
[HttpPost]
public ActionResult PostActionHere(ActionRequestClass request)
{
using (var context = new MyEntityFrameworkContext())
{
....
// use context here
context.SaveChanges()
....
}
}
}
我想开始将其注入控制器。主要是因为我认为阅读更容易,并且使用.NET核心依赖注入更均匀。
[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
语句所带来的处置属性。真的吗?随时建议替代方法。
注入它,我将失去使用语句随附的处置属性。真的吗?
否:
AddDbContext扩展方法寄存了DBContext类型 默认情况下,范围界定寿命。
配置DBContext
以及示波器(此处httprequest(结束时,范围的寿命对象将被处置。