Вот еще один из этих вопросов LinqToSQL, где я уверен, что я где-то пропустил лодку, потому что поведение дизайнера O / R очень меня озадачивает ...
У меня есть базовый класс для моих таблиц LinqToSQL, который я назвал LinqedTable
. Я успешно использовал рефлексию, чтобы овладеть всеми свойствами классов-потомков и сделать другие стандартные вещи.
Теперь я хочу провести некоторый автоматический аудит моих таблиц, чтобы при вставке или удалении записи LinqedTable
или изменении значения поля я вставлял запись в таблицу аудита с подробным описанием типа изменения, имя поля и его значение до и после сохранения.
Я думал, что смогу сделать это, используя событие PropertyChanging
, отслеживая все измененные свойства перед сохранением, а затем очищая коллекцию изменений после каждого вызова SubmitChanges()
. Но - сгенерированный код от дизайнера O / R по какой-то странной причине не дает вам имя свойства в событии PropertyChanging
- он отправляет пустую строку! ( ПОЧЕМУ?! ) отправляет имя свойства в событии PropertyChanged
, но уже слишком поздно для получения исходного значения.
Я решил собрать все исходные значения всех свойств, используя частичный метод OnLoaded()
, но по определению он является частным, и мне нужен доступ к этому методу в базовом классе. Даже если бы я использовал рефлексию, чтобы овладеть этим методом, это означало бы, что мне пришлось бы реализовать вторую половину частичного метода для каждой из моих таблиц, что в некотором роде противоречит цели получения наследства!
Я также не могу найти подходящий метод в DataContext для использования или переопределения.
Так что бы вы порекомендовали, чтобы эта функция аудита работала?