Как создать связь между двумя таблицами с ревизиями, используя Entity Framework - PullRequest
1 голос
/ 01 мая 2010

Итак, я нахожусь в процессе реорганизации небольшой базы данных (и, возможно, гораздо большей), но хочу показать ценность использования ревизий / истории бизнес-объектов. Я переключаю данные с Access на MSSQL 2008.

У меня много внутренних дискуссий о том, какую версию «истории изменений» использовать в самом дизайне, и подумал, что решил добавить «RevisionId» во все таблицы.

С этим дизайном - добавление RevisionId ко всем таблицам, которые мы хотели бы отслеживать - каков будет лучший способ создания навигационных свойств и отношений между двумя таблицами, таких как

| Vendor | VendorContact |  

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

Спасибо заранее.

1 Ответ

1 голос
/ 01 мая 2010

Таким образом, вероятно, ваш ключ для таблицы контактов теперь будет (сгенерированный уникальный идентификатор + идентификатор редакции).

И между поставщиком и контактом будут установлены отношения FK, использующие только уникальный идентификатор. Так что это будет отображение 1: много.

И простой запрос на получение текущего контакта станет vendor.Contacts.OrderByDescending(c => c.RevisionId).First(), или вы можете получить всю историю изменений для этого контакта, если хотите.

ИЛИ вы пытаетесь отследить, как этот контакт изменился с течением времени (то есть это был человек А, а не человек Б)? то есть нужно ли для самого отношения иметь RevisionId?

Или, возможно, вы пытаетесь отследить обе ревизии отношения И ревизии контакта, на который она указывает?

vendor.VendorContacts.OrderBy...().First().Contact.OrderBy...().First()

Это может стать довольно уродливым быстро!

...