Могу ли я "игнорировать" связанные объекты с помощью NHibernate Merge? - PullRequest
1 голос
/ 17 февраля 2011

У меня есть несколько «тупых» сущностей, поступающих по http-запросу, которые я хочу сохранить как можно проще.Эти сущности имеют все свои собственные данные, но ни один из них не касается связанных сущностей (пользователей и т. Д.).

Использование Session.Merge, кажется, выполняет достаточно хорошую работу, возвращая отсоединенную сущность обратно в сеанси я не теряю ни одной из связанных коллекций.Но все, что связано через отношение «Ссылки», исчезает, когда я сохраняю объединенную сущность.Я не думаю, что это каскадное поведение (у меня есть каскад = не определено соглашением).

Есть ли способ изменить поведение слияния (с помощью конфигурации или иным образом), чтобы я мог объединить эти неполные объектыне нарушая ассоциаций?Я надеюсь избавиться от большого количества кода слияния "roll your own", который в данный момент существует.

Я использую свободный nhibernate для отображения, если это изменит доступные опции.

edit:

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

1 Ответ

2 голосов
/ 17 февраля 2011

Метод слияния NHibernate делает что-то немного отличное от того, что вы думаете, я думаю. Он в основном присоединяет объект и его дочерние элементы к сеансу, заменяя любую копию той же записи, которая уже существует. Что вам нужно, это что-то, что действует как слияние SVN, берет ваши изменения из графа объектов, который вы передаете, и интегрирует их в существующий граф объектов. Это за пределами возможностей NH.

Извините, но я думаю, что вы застрянете на своем. Чтобы заставить NH делать что-то вроде этого, потребовалось бы настроить множество правил о таких вещах, как «когда нулевая ссылка является действительным изменением, а когда его следует игнорировать», что может даже меняться от случая к случаю.

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