我的ASP.NET Core 2.1 Web应用程序通过将DbContext
添加为范围服务来使用Entity Framework 6:
public void ConfigureServices( IServiceCollection services )
{
String connectionString = this.Configuration.GetConnectionString("db");
services.AddScoped<IMyDbContext,MyDbContext>( _ => new MyDbContext( connectionString ) );
// ...
}
然后我的控制器可以直接使用它,并且ASP.NET Core确保在控制器操作完成后将处置IMyDbContext
(实现IDisposable
)... 最终。
但是我注意到我的MyDbContext
在动作返回后(或动作的Task
对于异步动作完成了)并没有被立即处置,因为我遇到了一些错误,而我无意中返回了{{ 1}}对象直接指向输出格式化程序(这是一个JSON格式化程序,用于查询我仍然连接的Entity对象上的所有导航属性,从而导致非常昂贵的延迟加载发生),但是直到我继续前进时,我才注意到这一点去另一个任务。如果IQueryable
在操作返回后立即被处理,那么导航属性将抛出MyDbContext
(即快速失败),而我会早点解决它。
是否有一种方法可以使ASP.NET Core在控制器操作返回后而不是在请求完成时立即处置范围内的服务?