我正在开发我的第一个 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/