EFCore состояние записи трека: IsNew / IsLoaded - PullRequest
0 голосов
/ 26 февраля 2020

Мне просто нужно отследить, была ли запись загружена из базы данных или является новой.
Контекстом является приложение WPF / EFCore 2.2.4.
Одним из способов может быть проверка, находится ли состояние записи записи в 'активный' DbContext, то есть DbContext, который обрабатывает операцию.
Если запись находится в состоянии Добавлена ​​(только что добавлена) или Отсоединена (вновь создана и еще не добавлена ​​в контекст), я могу предположить, что это новый.
Но это работает только при определенных обстоятельствах.

  1. Записи никогда не отсоединяются вручную
  2. Записи удаляются из коллекции, удаляя их из коллекций, вместо вызова удаления из контекста (поскольку он переводит их в отдельное состояние).

И могут быть другими случаями, которые я не могу себе представить сейчас.

Чтобы преодолеть эту проблему, когда я впервые реализовал приложение, я добавил в свою базовую модель свойство IsNew bool. Этот «явный» подход должен дать полностью узнаваемый результат.
К сожалению, он также имеет недостатки. EFCore требует конструктора publi c для сущностей, который используется для загрузки сущностей. Но ничто не помешает разработчику использовать его для создания новых объектов. Поэтому его нельзя использовать для установки состояния в IsLoaded или IsNew = false, или что-то еще.

Теперь у меня остались только подходы «второго выбора»: - установка IsNew после создания (предоставление ложного значения по умолчанию) - предоставление метода stati c, который правильно конструирует и инициализирует IsNew

Второй вариант не был бы таким плохим, если бы только я мог сделать конструктор неопубликованным c.

Есть ли какое-нибудь другое лучшее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...