Я использую .NET Entity Framework 4.1 с подходом «сначала код», чтобы эффективно решить следующую проблему, здесь упрощенно.
- Есть таблица базы данных с десятками тысяч записей.
- Несколько пользователей моей программы должны иметь возможность
- просматривать (всю) таблицу в GridRow, что подразумевает необходимость загрузки всей таблицы.
- Изменение значений любогослучайный ряд, изменения часты, но не должны сохраняться немедленно.Ожидается, что разные пользователи будут изменять разные строки, но это не всегда так.Допускается некоторая потеря изменений, поскольку пользователи, скорее всего, обновят одни и те же строки до тех же значений.
- Иногда добавляют новые строки.
Звучит достаточно просто.Мой первоначальный подход состоял в том, чтобы использовать длительный экземпляр DbContext
.Этот DbContext
должен был отслеживать изменения в сущностях, поэтому при вызове SaveChanges()
большая часть работы выполняется автоматически.Однако многие отмечают, что это не оптимальное решение в долгосрочной перспективе , особенно здесь .Я до сих пор не уверен, что понимаю причины, и не вижу, что такое единица работы в моем сценарии.Пользователь сам выбирает, когда следует сохранить изменения, и скажем, что клиент всегда выигрывает для простоты.Также важно отметить, что объекты, которые не были затронуты, не перезаписывают никакие данные в базе данных.
Другой подход заключается в том, чтобы отслеживать изменения вручную или использовать объекты, которые отслеживают изменения для меня, однако я неЯ слишком знаком с такими приемами, и я бы приветствовал толчок в правильном направлении.
Как правильно решить эту проблему?
Я понимаю, что этот вопрос немного бесполезен, но считаю его более фундаментальным.Мне не хватает фундаментального понимания того, как решить этот класс проблем.Мне кажется, что долгоживущий DbContext
- верный путь, но знающие люди говорят мне иначе, что приводит меня к замешательству и неточным вопросам.
EDIT1 Еще один момент путаницы - этосуществование свойства Local
на объекте DbSet<>
.Он приглашает меня использовать длительный контекст, так как другой пользователь разместил здесь .