NHibernate & Temporal отношения, обеспеченные базой данных - PullRequest
0 голосов
/ 13 декабря 2010

Это должна быть ситуация, с которой сталкивались другие люди, поэтому я решил задать вопрос.Попросите людей внедрить хорошие общие решения проблемы представления временных отношений в nHibernate.Эта проблема существует в базе данных, над которой у меня нет контроля, поэтому, пожалуйста, не говорите мне, что модель БД неверна.Я не могу его изменить.

У нас есть простые отношения Родитель: Дочерний, где Действительное время ребенка должно находиться в пределах Действительного времени родителя.Проще говоря, Parent.ValidFrom <= Child.ValidFrom && Parent.ValidTo> = Child.ValidTo.Это правило применяется в базе данных, что означает, что я не могу выполнить инструкцию UPDATE, которая приведет к нарушению записей.Это не подлежит обсуждению.

Важно, что это влияет на порядок, в котором я записываю изменения в БД.

  1. Расширение дочернего = 2 ОБНОВЛЕНИЯ.
    i.Разверните Родителя.
    ii.Expand Child.
  2. Свертывание родителя = 2 ОБНОВЛЕНИЯ.
    i.Договорись с ребенком.
    ii.Свернуть родителя.
  3. Перемещение родителя и ребенка к дате в будущем = 3 ОБНОВЛЕНИЯ.
    i.Замените родительский ValidTo.
    ii.Переместить ребенка.
    iii.Переместить Parent.ValidFrom.
  4. Перемещение родителя и потомка к дате в прошлом = 3 ОБНОВЛЕНИЯ.
    i.Измените Родительский ValidFrom.
    ii.Переместить ребенка.
    iii.Move Parent.ValidTo.

Итак, мы видим, что порядок, в котором происходят обновления, очень важен.Мы не можем полагаться только на обновления по умолчанию в nHibernate.Кроме того, в некоторых случаях нам нужно выполнить два ОБНОВЛЕНИЯ для одной сущности, где nHibernate, как правило, сделает это.

Итак, я хочу перейти к тому моменту, когда я могу выразить общий временный Parent: Child в моеммодель предметной области (возможно, с использованием [атрибута] декорированных классов), и какой-то код выполняет тяжелую работу за меня.

Кто-нибудь сталкивался с этой проблемой, и кто-нибудь может дать какой-нибудь совет?

ПожалуйстаОпять же, имейте в виду, что у меня нет контроля над моей схемой БД, и я хотел бы написать что-то общее, что можно применить ко всей моей модели.Единственное предостережение в том, что я забочусь только о фиксации объектов, которые я исправил в памяти.Так что я не собираюсь писать какой-то код, чтобы решить, какие будут правильные даты ValidFrom / ValidTo.

1 Ответ

1 голос
/ 13 декабря 2010

Поскольку у вас нет контроля над порядком, в котором NH выпускает операторы обновлений, возможно, лучше всего использовать IStatelessSession для обновления "вручную".

По сути, вы отказываетесь от отслеживания изменений;вам нужно указать NH, какой объект обновлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...