我应该如何配置Blazor的实体框架生命周期



我正在开发一个广泛使用实体框架的blazor应用程序。我读过一些文章,认为DbContext的默认生命周期不适合Blazor(请参阅https://stackoverflow.com/a/66817764/14024210)。但是,我不打算将上下文直接注入到我的组件中,而是使用一个将上下文注入其中的服务。只要上下文在我的主要表单组件的生命周期中存在,就不应该有任何问题。

  • 我应该将上下文和服务都配置为瞬态吗?我的理解是,每当组件接收到上下文时,这将提供两者的新实例
  • 我的服务是否需要实现IDisposable才能正确处理?或者,如果它唯一的依赖项是DbContext,那么这不是必要的吗

简而言之,我想正确地实现;工作单位;DbContext的设计理念。

当您使用Blazor WebAssembly时,它会在服务器上自行解析:每个API调用都有一个完全可用的生存期用作Scope。

对于Blazor服务器端,使用DI管理DbContexct是不合适的。

推荐的方法是为每个操作创建一个DbContext,并使用using(...) {...}块进行管理。您可以注入DbContextFactory来帮助进行配置。

每个组件使用一个DbContext可能很诱人,但这会导致上下文打开很长时间,并增加服务器上的内存使用。这不会很好地扩展,也不鼓励使用服务。

因此,我将使用一个DbContext-per-Service方法。

最新更新