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