0

我确实知道 Scoped、Singleton 和 Transient 服务生命周期之间的区别,但我的知识仅限于无状态的 MVC 应用程序。

当我使用 AddScoped(每个请求的生命周期)添加一个 EntityFramework 上下文时,混乱的根源就开始了,然后,我需要做的就是更新我的数据库:

public void SaveUser()
{
    db.SaveChanges();
}

这与 MVC 应用程序非常不同,因为在那里,对象与上下文完全解耦,例如,它们被转换为 JSON 并发送到客户端,或者从客户端到服务器(或者换句话说,另一个请求制作):

public void SaveUser(User updatedUser)
{
    var existing = db.Users.Find(updatedUser.Id);
    existing.Name = updatedUser.Name;
    db.SaveChanges();
    // I can also use something like Attach() or Update() instead.
}

这在 Razor 组件中是可能的,因为所有对象(我已经绑定到 UI)仍然由上下文以有状态的方式通过SignalR. EF Context 似乎“永远不会”被处置。

在 MVC 应用程序中,EntityFramework 上下文在每个请求之前重新创建,并在之后处理(正如您所期望的那样AddScoped)。

所以,我有三个问题:

  1. Razor Components 中的“请求”到底是什么。服务器端 Blazor(从服务生命周期的角度来看)?
  2. 客户端丢失连接并在之后重新连接怎么办?
  3. 在任何情况下我需要验证对象是否“仍然”被上下文跟踪,或者这种问题永远不会发生?
4

0 回答 0