NHibernate много ко многим неэффективность? - PullRequest
3 голосов
/ 15 декабря 2009

Я пытаюсь настроить пример проекта, используя NHibernate и Fluent NHibernate. Я использую пример сопоставлений с веб-сайта Fluent NHibernate.

Мой вопрос касается отображения «многие ко многим» между магазином и продуктом. Кажется (при взгляде на сгенерированный SQL), что при добавлении товара в магазин NHibernate удаляет все записи из таблицы ассоциации (StoreProduct), которые принадлежат этому магазину, а затем снова вставляет все записи, теперь включая связь с новый продукт, который я добавил.

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

1 Ответ

5 голосов
/ 15 декабря 2009

Это ожидаемое поведение. Я полагаю, что это должно происходить только тогда, когда вы используете стратегию отображения bag , которую, похоже, они используют в примере. Сумка указывает на наличие неупорядоченной коллекции, в которой могут быть повторяющиеся элементы. Так как элементы сумки не уникальны, NHibernate не может определить, когда вы легко добавили или удалили элемент из сумки. Самое простое для NHibernate - это удалить все ассоциации, а затем заново добавить.

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

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