c# - Blazor、对象生命周期和依赖注入(inject)

标签 c# entity-framework dependency-injection blazor lifetime

我正在开发我的第一个 Blazor 项目,我面临着有关对象生命周期的问题。

确切的问题是我的 EF DbContext 永远不会被释放,因此在第一次数据库更新后,任何后续更新都会失败,因为异常告诉我该实体已被上下文跟踪。

因此,经过调查,我发现所有依赖注入(inject)的服务都会在应用程序启动时解析,并且永远不会被释放,作为 UnitOfWork 注入(inject)的 DbContext 也是如此

在 MVC 中,只要调用结束,端点对象就会被释放,因此 DbContext 会被释放,并且这个问题永远不会发生。

但是 Blazor 中对象的生命周期是不同的。作为一个好的实践,我应该在需要时手动解析 DbContext,还是错过了什么?

编辑: 我还应该补充一点,我的 DbContext 已作为 Scoped

添加到 IServiceCollection

最佳答案

Blazor 没有服务器所具有的方便的请求范围。

您应该自己管理上下文,不能(完全)将其留给 DI。

This page向您展示如何:

  • 使用 using( ... ) 管理方法范围内的上下文
  • 或使用 @implements IDisposable 将其链接到组件生命周期

在这两种情况下,您都可以使用 DbContextFactory(EF5 中的标准问题)来创建它,同时使用注册的配置选项。

所以永远不要注入(inject) DbContext 本身。

关于c# - Blazor、对象生命周期和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63796174/

相关文章:

c# - 如何在 Bot Framework (C# SDK) 中的单个 Luis 对话框中集成多个 Luis 语言模型

sql-server - 当我使用 Entity Framework 将 bool 映射到 SQL Server 时,如何定义 SQL Server 数据类型?

c# - 模型类(实体)中的依赖注入(inject)

c# - 是否可以在 C# 中使用无类型泛型列表?

c# - Windows Phone 检查手机是否越狱或 root?

c# - web请求如何检查用户是否成功登录

c# - 如何将此 SQL 查询转换为 LINQ (OVER (PARTITION BY Date))

c# - LINQ 成员表达式获取列名

带接口(interface)的 Angular 6 服务

spring - @Autowired 验证器内的 DAO