Свободный NHibernate; управление коллекцией - PullRequest
0 голосов
/ 23 июля 2011

У меня очень простая ситуация, но я, кажется, не могу разобраться;У меня есть таблица акции , в которой есть много сайтов . сайт может использоваться с различными акциями , и в моей (postgres) базе данных у меня есть 3 таблицы;рекламные акции, сайты и promotions_sites.В моем веб-приложении пользователь может отредактировать продвижение и добавить коллекцию сайтов (новая строка отделена).Таким образом, при сохранении коллекция сайтов сохраняется при продвижении.Это работает.Тем не менее есть 2 проблемы;1) старые записи сайта не удаляются (при удалении из строк сайтов) 2) при сохранении текущего сайта все исходные сайты воссоздаются

У меня вопрос, на каком уровне мне следует управлятьместа;1) уровень приложения;просто удалив все сайты перед повторной вставкой 2) уровень данных;есть ли конфигурация nhibernate для этого?3) уровень базы данных;создавать триггеры / каскадные удаления в таблице сайта на основании отсутствия элемента в promotions_sites

1 Ответ

0 голосов
/ 24 июля 2011

Сначала автоматическая сирота удаляется. Сайты не могут быть удалены автоматически, если ваше отношение определено как many-to-many.Но если ваша таблица promotions_sites отображается как отдельная сущность, и у вас есть два отношения one-to-many на сайтах и рекламных акциях , вы можете добиться автоматического удаления, установив cascade о тех отношениях к all-delete-orphan.

Второе - где управлять коллекцией.Вы должны позволить NHibernate сделать это.Предполагая, что у вас есть правильные отображения, вы не должны заботиться об этом на уровне приложения или особенно на уровне триггера базы данных.В любом случае, логика обработки коллекций в NHibernate несколько отличается от того, что вы, возможно, знаете на уровне базы данных.Обычно вам нужно загрузить родительский объект с существующей дочерней коллекцией, изменить коллекцию и зафиксировать изменения в базе данных.Вы не должны заменять всю коллекцию.

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

...