Сценарии и проблемы
Внутренние ссылки:
Дочерние страницы:
Обратные ссылки:
Табличные указания (Хинты), явные блокировки. | Варианты на основе механизма Interception EF | Перехватчики. Entity Framework with NOLOCK How to implement Select For Update in EF Core | |||||||||
Использование конструктора типа | 1) По умолчанию фреймворк будет использовать конструктор без параметров, чтобы фреймворк попытался выбрать подходящий конструктор, конструктора без параметров быть не должно. (При этом достаточно создать конструктор с необязательным параметром) 2) В качестве параметров конструктора нельзя передавать навигационные свойства, а также комплексные/вложенные свойства. | |||||||||
Изменение сущности без загрузки из БД. |
Change Tracking | Отслеживание изменений Дополнение: рассматривается сценарий с отслеживанием изменений по умолчанию (с использованием автоматического определения изменений через сравнение, а не IPropertyChanged) | |||||||||
Про AsNoTracking, Attach и ошибку "The instance of entity type cannot be tracked because another instance with the same key value for {'key'} is already being tracked..." | Вводные:Делаем следующую выборку из 2 таблиц Change Tracking | Отслеживание изменений
Завершение:В случае, если попытаться прикрепить полученный графы (Entity1 и Entity2) объектов к другому контексту, то можно получить ошибку из-за двух экземпляров LinkedEntity с одинаковым первичным ключом. UDP: в случае, если запрос один можно использовать метод AsNoTrackingWithIdentityResolution | |||||||||
Организация поиска в локальном наборе (Change Tracking | Отслеживание изменений) по альтернативным ключам. Отслеживание событий присоединения/отсоединения сущностей и сохранение их в Dictionary с нужным ключом (с учетом уникальности ключа). | ||||||||||
Несколько индексов над одинаковыми столбцами. | Необходимо явно указать псевдоним, что framework смог их различить. builder.HasIndex(e => new { e.column1, e.column2 }, "index1") .IsUnique(false); builder.HasIndex(e => new { e.column1, e.column2 }, "index2") .HasFilter(@"""column1"" = 1") .IsUnique(true); |