Мне просто нужно отследить, была ли запись загружена из базы данных или является новой.
Контекстом является приложение WPF / EFCore 2.2.4.
Одним из способов может быть проверка, находится ли состояние записи записи в 'активный' DbContext, то есть DbContext, который обрабатывает операцию.
Если запись находится в состоянии Добавлена (только что добавлена) или Отсоединена (вновь создана и еще не добавлена в контекст), я могу предположить, что это новый.
Но это работает только при определенных обстоятельствах.
- Записи никогда не отсоединяются вручную
- Записи удаляются из коллекции, удаляя их из коллекций, вместо вызова удаления из контекста (поскольку он переводит их в отдельное состояние).
И могут быть другими случаями, которые я не могу себе представить сейчас.
Чтобы преодолеть эту проблему, когда я впервые реализовал приложение, я добавил в свою базовую модель свойство IsNew bool. Этот «явный» подход должен дать полностью узнаваемый результат.
К сожалению, он также имеет недостатки. EFCore требует конструктора publi c для сущностей, который используется для загрузки сущностей. Но ничто не помешает разработчику использовать его для создания новых объектов. Поэтому его нельзя использовать для установки состояния в IsLoaded или IsNew = false, или что-то еще.
Теперь у меня остались только подходы «второго выбора»: - установка IsNew после создания (предоставление ложного значения по умолчанию) - предоставление метода stati c, который правильно конструирует и инициализирует IsNew
Второй вариант не был бы таким плохим, если бы только я мог сделать конструктор неопубликованным c.
Есть ли какое-нибудь другое лучшее решение?