Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Blazor、对象生命周期和依赖注入_C#_Entity Framework_Dependency Injection_Blazor_Lifetime - Fatal编程技术网

C# Blazor、对象生命周期和依赖注入

C# Blazor、对象生命周期和依赖注入,c#,entity-framework,dependency-injection,blazor,lifetime,C#,Entity Framework,Dependency Injection,Blazor,Lifetime,我正在做我的第一个Blazor项目,我面临一个关于对象生命周期的问题 确切的问题是,我的EFDbContext永远不会被释放,因此在第一次数据库更新之后,任何后续更新都会失败,因为异常告诉我实体已经被上下文跟踪 因此,在调查之后,我发现所有依赖注入服务在应用程序启动时都会得到解决,并且永远不会被处理,DbContext也是如此,它作为一个工作单元被注入 在MVC中,端点对象在调用结束时被释放,因此DbContext被释放,而这个问题永远不会发生 但在Blazor中,物体的寿命是不同的。作为一种良

我正在做我的第一个Blazor项目,我面临一个关于对象生命周期的问题

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

因此,在调查之后,我发现所有依赖注入服务在应用程序启动时都会得到解决,并且永远不会被处理,
DbContext
也是如此,它作为一个工作单元被注入

在MVC中,端点对象在调用结束时被释放,因此
DbContext
被释放,而这个问题永远不会发生

但在Blazor中,物体的寿命是不同的。作为一种良好的实践,我应该在需要时手动获取解析
DbContext
,还是遗漏了什么

编辑:
我还应该补充一点,我的
DbContext
被添加到
IServiceCollection
,因为
作用域

Blazor没有服务器所拥有的方便的请求作用域

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

向您展示如何

  • 使用(…)管理方法作用域中的上下文
  • 或者使用
    @implements IDisposable
在这两种情况下,您都可以在使用注册的配置选项时使用DbContextFactory(EF5中的标准版本)来创建它


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

您到底是如何注入DbContext的?张贴代码。please.services.AddDbContext(选项);这是我第一次创建工厂模式。它就像一个符咒!