Что можно ожидать от продолжительности службы в приложении Razor Components (Server Side Blazor)?
Я знаю разницу между временем жизни сервисов 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 Components, потому что все объекты (которые я связал с пользовательским интерфейсом) все еще отслеживаются контекстом, с сохранением состояния, через SignalR
, Контекст EF, кажется, "никогда" не удаляется.
В приложении MVC контекст EntityFramework воссоздается перед каждым запросом и удаляется после (как вы можете ожидать от AddScoped
).
Итак, у меня есть три вопроса:
- Что именно является "запрос" в Razor Components ака. Server Side Blazor (с точки зрения срока службы)?
- Как насчет клиентов, потерявших соединение и подключившихся после?
- Есть ли ситуации, когда мне нужно проверить, отслеживается ли объект "по-прежнему" контекстом, или такого рода проблема никогда не возникает?