добавить метод журнала к каждому сеттеру - PullRequest
1 голос
/ 08 августа 2011

У меня есть 5 сущностей, которые загружаются с использованием структуры сущностей. Вот они: enter image description here
Все объекты наследуются от:
enter image description here

(каждая сущность представлена ​​классом со свойствами, описанными выше. Все сущности наследуют сущность передачи).
Как вы можете видеть, у некоторых объектов есть общие свойства. Но свойства WorkerId, WorkerPersonalId, VehicleId, VehicleNumber, SubcontractorId имеют специальные методы для SET, поэтому для инкапсуляции логики обновления я создал класс WorkerVehicleTransmission с реализацией этих установщиков свойств. Каждая передача теперь использует WorkerVehicleTransmission.
Теперь у меня есть новая потребность. Мне нужно регистрировать каждое изменение свойства. Для этого у меня есть метод Log (). Для примера, мне нужно, чтобы, когда пользователь делает cargoStorage.Weight=8;, был вызов Log (), который запишет это изменение.

Важная проблема: мне нужно найти решение, при котором создание сущности (например, структурой сущностей) не будет регистрироваться.

Как я могу интегрировать новую потребность?

Этот вопрос действительно необходим для примера, о котором я здесь спрашиваю: как решить эту проблему с дублированием кода + добавить другой метод

1 Ответ

0 голосов
/ 08 августа 2011

Для начала вы можете присоединить обработчик к событию PropertyChanged в базовом классе Transmission, что позволит вам вызывать метод Log при каждом изменении свойства в любом из ваших подклассов.

Событие INotifyPropertyChanged.PropertyChanged

Это, однако, сработает, когда будут внесены какие-либо изменения, в том числе, когда Entity Framework создает объекты, так что это только половина пути.


Редактировать

Если вы создаете новое свойство в классе Transmission (логический флаг), вы можете использовать его в своих подпрограммах объекта доступа к данным, чтобы указать, следует ли включать ведение журнала.

Этот флаг устанавливается всегда только после завершения любого действия Entity Framework для каждого объекта, поэтому регистрируются только изменения свойств, относящиеся к вашему коду.

Не элегантное решение, но я не вижу другого пути.


Редактировать

Только что посмотрел на базовые члены EntityObject, и есть свойство (перечисление) с именем EntityState.

Свойство EntityObject.EntityState

Это свойство имеет значение «Отдельно», когда объект создается (не привязан к контексту объекта) с помощью Entity Framework, и после него изменяет свое значение на «Добавлен», «Удален», «Изменен» или «Не изменен». добавляется (в зависимости от состояния объекта).

Проверяя, является ли значение чем-то отличным от «Detached», вы можете определить, следует ли включить ведение журнала.

...