Это должна быть ситуация, с которой сталкиваются другие люди, поэтому я решил задать вопрос. Попросите людей реализовать хорошие общие решения проблемы представления временных отношений в nHibernate. Эта проблема существует в базе данных, над которой у меня нет контроля, поэтому, пожалуйста, не говорите мне, что модель DB неверна. Я не могу его изменить.NHibernate & Temporal отношения, установленные в базе данных
У нас есть простая связь между родителями: дети, где Действующее время ребенка должно находиться в пределах допустимого времени родителя. Просто поставьте Parent.ValidFrom < = Child.ValidFrom & & Parent.ValidTo> = Child.ValidTo. Это правило применяется в базе данных, то есть я не могу выпустить инструкцию UPDATE, которая заставит записи нарушать ее. Это не подлежит обсуждению.
Важно отметить, что это влияет на порядок, в котором я записываю изменения в БД.
- Расширение ребенка = 2 ОБНОВЛЕНИЯ.
i. Развернуть родительский.
ii. Развернуть ребенка. - Подписание родителя = 2 ОБНОВЛЕНИЯ.
i. Контракт ребенка.
ii. Контракт Родитель. - Перемещение родителя и ребенка на будущее в будущем = 3 ОБНОВЛЕНИЯ.
i. Изменить родительский ValidTo.
ii. Переместите ребенка.
iii. Переместить родительский. ValidFrom. - Перемещение родителя и ребенка на сегодняшний день в прошлом = 3 ОБНОВЛЕНИЯ.
i. Измените родителя ValidFrom.
ii. Переместите ребенка.
iii. Переместить Parent.ValidTo.
Итак, мы видим, что порядок, в котором происходят обновления, очень важен. Мы не можем просто полагаться на обновления nHibernate по умолчанию. Кроме того, в некоторых случаях нам нужно сделать два UPDATE в одном объекте, где nHibernate обычно делает это.
Итак, я хочу перейти к тому, что я могу выразить общий временный родитель: ребенок в моей модели домена (возможно, используя [атрибут] украшенные классы), и у меня есть какой-то код для меня.
Кто-нибудь сталкивался с этой проблемой и мог ли кто-нибудь дать совет?
Пожалуйста, помните, что я не контролирую свою схему БД и хочу написать что-то общее, которое может быть применено ко всей моей модели. Единственное предостережение в том, что я только забочусь об объектах, которые я исправил в памяти. Поэтому я не ожидаю написать какой-то код, чтобы решить, какие правильные даты ValidFrom/ValidTo.