Что можно ожидать от продолжительности службы в приложении Razor Components (Server Side Blazor)? - PullRequest
0 голосов
/ 23 апреля 2019

Я знаю разницу между временем жизни сервисов Scoped, Singleton и Transient, но мои знания ограничены приложением MVC без сохранения состояния.

Корень путаницы начинается, когда я добавляю контекст EntityFramework с использованием AddScoped (время жизни для каждого запроса), а затем все, что мне нужно для обновления базы данных:

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, потому что все объекты (которые я связал с пользовательским интерфейсом) все еще отслеживаются контекстом с сохранением состояния до SignalR. Контекст EF, кажется, «никогда» не удаляется.

В приложении MVC контекст EntityFramework воссоздается перед каждым запросом и удаляется после (как вы можете ожидать от AddScoped).

Итак, у меня есть три вопроса:

  1. Что такое «запрос» в Razor Components aka. Server Side Blazor (с точки зрения срока службы)?
  2. А как насчет клиентов, потерявших соединение и восстановивших соединение после?
  3. Есть ли ситуации, когда мне нужно проверить, отслеживается ли объект "все еще" контекстом, или такого рода проблемы никогда не возникает?
...