2017-02-15 8 views
2

Используя EF (сначала код) в нашем слое данных, нам необходимо включить функции аудита для изменений сущностей. Я смог выяснить, как успешно зафиксировать изменения свойств типа значения с помощью Change Tracker. Я также теперь думаю, что понял, как получить информацию, необходимую мне для регистрации отношений «многие-ко-многим».Аудит аудита сущностей для 1-многих отношений и захвата связанного объекта

Моя оставшаяся проблема заключается в том, как регистрировать отношения «один ко многим» и фиксировать информацию об объекте.

В следующем Сущности предположим, что Этничность изменилась.

public class Person 
{ 
     public Guid Id { get; set; } 
     public Guid? EthnicityId { get; set; } 
     public Ethnicity Ethnicity { get; set; } 
} 

За кулисами в SaveChanges он только дает вам список пар ключ-значение для измененных свойств. Таким образом, вы все равно получите в этом случае: «EntityId», «{GUID HERE}». Я могу записать, что руководство изменено, но эта информация практически бесполезна для пользователя. То, что мне нужно для захвата, - это также отображаемое имя (что-то, что все наши сущности реализуют) и записывать его также.

Единственного, что я могу думать: (оговорка это чувствует, как ужасное решение для меня)

  1. Посмотрите на имени свойства.
  2. Если строка заканчивается на Id, но не является только «Id», то Trim it off.
  3. Используйте строку имени свойства Trimmed, чтобы получить ссылку на этот тип (Enthnicity в этом случае)
  4. Используйте EF снова, чтобы получить идентификатор для этого типа с помощью Guid.
  5. Включите объект как наш базовый тип, который имеет DisplayName.
  6. Получите отображаемое имя и добавьте его в Журналы.

Я действительно очень не хочу этого делать. Я не могу себе представить, что это не было раньше. Нет ли там какой-либо магии, которая откроет ссылку на базовую сущность?

Спасибо!

ответ

0

Если у вас есть веская причина сделать это специально в коде, я бы рекомендовал сделать это с помощью SQL Server Change Data Capture. Это требует небольших усилий в настройке и делает хорошую работу. https://msdn.microsoft.com/en-us/library/cc645937.aspx