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