ASP.NET Core Blazor 服务器中的实体框架上下文生命周期

穆斯塔法

我的问题是当我在我的上下文中执行 CRUD 操作时,我的组件中没有进行更改。

DbContext 注册如下:

    services.AddDbContextFactory<DBContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("my_ConnectionStrings")),
        lifetime: ServiceLifetime.Transient);

在上面的代码中,我配置ServiceLifetimeTransient. 因此,每次请求时都必须创建该服务的新实例。

这是我的代码:

[Inject] IDbContextFactory<DBContext> DbFactory;

private string updateMessage(int messageID)
{
   DBContext _context = DbFactory.CreateDbContext();
   
   var result = _context.Messages.FirstOrDefault(s => s.MessageID == messageID);
   if (result != null)
   {
        result.LastUpdate= DateTime.Now.ToString("HH:mm:ss");
        _context.SaveChanges();
   }
 
   
   var assert = _context.Messages.FirstOrDefault(s => s.MessageID == messageID);
   return "Last update is: " + assert.LastUpdate;
}

在上面的代码中,我将工厂注入到我的组件中并创建了新实例。但是我的组件中没有考虑上下文更改。我想观察组件中的上下文变化。

在上面的代码中,我修改了上下文,但没有任何变化,该方法返回LastUpdate.

穆斯塔法

在 Blazor Server 中,范围服务注册可能会出现问题,因为实例在用户电路中的组件之间共享。DbContext 不是线程安全的,也不是为并发使用而设计的。现有的生命周期是不合适的。有关详细信息,请参阅带有 Entity Framework Core 的 ASP.NET Core Blazor 服务器

您应该创建一个新的 DbContext 实例。创建新 DbContext 实例的一种方法是 usingusing语句。

试试这个代码:

[Inject] IDbContextFactory<DBContext> DbFactory;

private string updateMessage(int messageID)
{
   using (DBContext _context = DbFactory.CreateDbContext())
   {
       var result = _context.Messages.FirstOrDefault(s => s.MessageID == messageID);
       if (result != null)
       {
            result.LastUpdate= DateTime.Now.ToString("HH:mm:ss");
            _context.SaveChanges();
       }
   }
    
   var assert = new Messages();
   using (DBContext _context = DbFactory.CreateDbContext())
   {
      assert = _context.Messages.FirstOrDefault(s => s.MessageID == messageID);
   }
   return "Last update is: " + assert.LastUpdate;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Blazor,ASP.NET Core托管与ASP.NET Core中的服务器端

Blazor WASM Asp.net core Hosted = Blazor 服务器端?

ASP.NET Core托管的Blazor模板中的授权问题

ASP.NET Core Blazor 中的多个 Windows

在 ASP.NET Core 托管的 Blazor 应用程序中对服务器进行匿名调用

带有 ASP.NET Core MVC 控制器的 Blazor 服务器,验证问题

ASP.NET Core API服务生命周期

如何在服务器端Blazor中自定义ASP.NET Core身份?

IExceptionFilter处理程序在ASP.NET Core 3.1 Blazor(服务器端)中不起作用

我需要在 ASP.NET Core Blazor 服务器中延长会话到期超时/登录到期超时

如何在ASP.NET Core Blazor中的通用服务中使用任何模型

如何将Blazor Razor类库中的CSS / JS文件注入ASP.NET Core Blazor项目

在ASP.NET Core Blazor中将MongoDB作为服务使用

不使用VS 2017时如何安装ASP.NET Core Blazor语言服务?

Blazor将ASP.NET Core 3托管为Azure应用服务

真的,ASP.NET Core Hosted和服务器端Blazor有什么区别?

由于 ASP .net core blazor 应用程序的 SSRS 中的 CORS,访问被拒绝

如何将Tableau嵌入到ASP.NET Core Blazor中?

JWT不会通过Blazor存储在ASP.NET Core中

如何在ASP.NET Core 3.0中删除剩余代码以实现Blazor代码隐藏功能?

使用Blazor在ASP.NET CORE中更新数据库后如何刷新网页

使用 Blazor Asp.Net Core 的引导模式弹出窗口

Blazor无法连接到ASP.NET Core WebApi(CROS)

Blazor和ASP.NET Core 3.0 MVC

NET Core服务器端多会话Blazor

在ASP.NET Core中使用Autofac注册应用程序生命周期范围的服务

在ASP.NET Core中的IoC服务容器的上下文中有哪些请求?

ASP.NET Core Blazor对比.NET Core MVC与剃须刀

使用navlink时不会触发Blazor ASP.Net Core(服务器端)中的自定义URL重写规则