2009-11-25 4 views
0

Привет всем, быстрый вопрос NHibernate.Обновление всех строк денормализованной таблицы в NHibernate

В моем текущем проекте у нас есть денормализованная таблица, которая для данной уникальной записи заголовка будет иметь одну или несколько денормализованных строк.

Когда пользователь обращается к POCO, представляющему заголовок, и выполняет обновление, мне нужно, чтобы это изменение каскадировалось до всех денормализованных строк. Например, если пользователь меняет поле «A» в нормализованном заголовке, мне нужно, чтобы все денормализованные строки отображали новое значение для поля «A».

В настоящее время я хочу просто сделать foreach в нормализованном заголовке в наборе свойств, поскольку у меня уже есть IList, представляющий денормализованные строки, но я надеялся на более элегантное решение, которое не связано с написанием цикла foreach для каждого нормализованного поля, которое должно распространяться до денормализованной таблицы.

FYI в чистом мире Sproc, мы просто выпустим вторую команду обновления в save sproc с соответствующим предложением where, но мы также пытаемся отойти от зависимостей sproc и выполнять большинство операций в C#

TIA

+0

Учитывайте нормализацию таблицы. Я предполагаю, что есть веские причины, по крайней мере потому, что это наследие и, вероятно, производительность, я просто могу сказать вам, что гораздо легче обрабатывать его, когда он нормализуется. Поверьте, это стоит немало работы. –

+0

Существуют, по сути, некоторые очень специфические архитектурные причины, почему этот конкретный объект имеет связанную таблицу денорма, поэтому нормализация действительно не является вариантом. Надеюсь, тонна циклов тоже не является вариантом, так как это один из тех случаев, который решается в нескольких строках TSQL. –

+0

См. Этот дублированный вопрос. http://stackoverflow.com/questions/575810/are-denormalized-updates-possible-with-nhibernate-without-using-a-stored-procedur –

ответ

0

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

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

Короче говоря, когда заголовок обновляется в его сеттере, я делаю быстрый для каждого из списка подробных объектов, а также обновляю любые другие денормализованные pocos в дереве объектов, а затем отбрасываю их в базу данных с помощью простой saveorupdate с nHibernate.

-Bob

Смежные вопросы