gpt4 book ai didi

asp.net-core-mvc - Entity Framework Core 1.0 DbContext 未限定为 http 请求

转载 作者:行者123 更新时间:2023-12-01 00:44:47 25 4
gpt4 key购买 nike

通过与 Rowan Miller 一起观看这段视频,我明白了
https://channel9.msdn.com/Series/Whats-New-with-ASPNET-5/06
(第 22 分钟)Startup.cs 中将 Entity Framework Core(以前称为 EF7)配置到 ASP.NET Core 1.0 应用程序(以前称为 ASP.NET 5)中的方式如下:

    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 容器注入(inject)的实例将是相同的。

但问题是它似乎不是那样工作的。在 MVC 的生命周期内,注入(inject)的 DbContext 实例确实是相同的,但如下所述: Entity Framework Core 1.0 unit of work with Asp.Net Core middleware or Mvc filter
我试图在 Controller 完成执行后将以下中间件插入管道以实现某种集中的提交/回滚:
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 实例与在 MVC 生命周期内注入(inject)的实例不同 .

这是预期的吗?不应该将 DbContext 限定为 http 请求吗?有可能实现我想要实现的目标吗?

B 计划是使用 MVC 6 全局过滤器 (如果我能找到一些关于如何做到这一点的文档)。我假设作为 MVC 6 框架的一部分,注入(inject)的 DbContext 实例将是相同的。

最佳答案

经过更多测试后,我可以确认 DbContext 的范围是 http 请求 仅在 MVC 执行的生命周期内 (也许 MVC 负责处理 DbContext),因此管道中之前或之后的任何中间件都不会注入(inject)相同的 DbContext 实例。

然后我决定添加一个 全局过滤器 到 MVC 6(因为过滤器是 MVC 框架的一部分),以便我可以在操作执行之前和之后访问相同的 DbContext 实例。

如果有人对如何创建此全局过滤器检查感兴趣:
Entity Framework Core 1.0 unit of work with Asp.Net Core middleware or Mvc filter

关于asp.net-core-mvc - Entity Framework Core 1.0 DbContext 未限定为 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35329480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com