Entity Framework Core 1.0 DbContext не ограничен запросом http

Я понял, посмотрев это видео с Роуэн Миллерhttps://channel9.msdn.com/Series/Whats-New-with-ASPNET-5/06 (на 22 минуте) что способ настройки Entity Framework Core (ранее известный как EF7) в приложение ASP.NET Core 1.0 (ранее известный как ASP.NET 5) вStartup.cs как следует:

    public void ConfigureServices(IServiceCollection services)
    {
        //Entity Framework 7 scoped per request??
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyDbContext>(options =>
            {
                options
                  .UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]);
            });

        //MVC 6
        services.AddMvc();
    }

и этоэтот DbContext будет ограничен запросом http так что всякий раз, когда в коде по всему конвейеру http (включая промежуточное программное обеспечение или MVC) используется DbContext, мы точно знаем, что экземпляр, внедренный контейнером DI, будет одинаковым.

Но проблема в том, что это, похоже, не работает таким образом. В течение времени существования MVC верно, что внедренный экземпляр DbContext является тем же, но как описано здесь:Entity Framework Core 1.0 единица работы с промежуточным программным обеспечением Asp.Net Core или фильтром Mvc Я пытаюсь подключить к конвейеру следующее промежуточное ПО для достижения некоторой централизованной фиксации / отката после завершения выполнения контроллером:

public class UnitOfWorkMiddleware
{
    private readonly RequestDelegate _next;
    private readonly MyDbContext _dbContext;
    private readonly ILogger _logger;

    public UnitOfWorkMiddleware(RequestDelegate next, MyDbContext dbContext, ILoggerFactory loggerFactory)
    {
        _next = next;
        _dbContext = dbContext;
        _logger = loggerFactory.CreateLogger<UnitOfWorkMiddleware>();
    }

    public async Task Invoke(HttpContext httpContext)
    {
        await _next.Invoke(httpContext);
        _logger.LogInformation("Saving changes for unit of work if everything went good");
        await _dbContext.SaveChangesAsync();
    }
}

и это промежуточное ПО находится непосредственно перед MVC6 в конвейере

//inside Configure(IApplicationBuilder app) in Startup.cs
app.UseMiddleware<UnitOfWorkMiddleware>();
app.UseMvcWithDefaultRoute();

Экземпляр DbContext в моем Middleware не совпадает с экземпляром, внедряемым во время жизни MVC.

Это ожидается? Не должен ли DbContext быть ограничен запросом http? Возможно ли добиться того, чего я пытался добиться?

План B будет заключаться в использованииMVC 6 Глобальный фильтр (если я могу найти некоторую документацию о том, как это сделать). Я предполагаю, что будучи частью инфраструктуры MVC 6, внедренный экземпляр DbContext будет таким же.

Ответы на вопрос(1)

Ваш ответ на вопрос