Двунаправленные ассоциации «один ко многим» с индексированными коллекциями в NHibernate - PullRequest
5 голосов
/ 15 апреля 2010

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

Обратите внимание, что NHibernate не поддерживает двунаправленные ассоциации «один ко многим» с индексированной коллекцией (списком, картой или массивом) в качестве «многих» концов, вы должны использовать набор или набор сумок.

Хотя я почти уверен, что понимаю , что говорит этот параграф, я понятия не имею , почему или , как обойти это ограничение. Поскольку сейчас я снова работаю с моделью, которая, по-видимому, требует «двунаправленной связи« один ко многим »с коллекцией индексов», я решил, что настало время для последующих вопросов:

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

  2. Каковы общие обходные пути для этого недостатка? Сделать коллекцию неиндексированной сумкой и добавить явное свойство Position в дочерний класс? Есть лучшие решения?

1 Ответ

5 голосов
/ 29 августа 2010

Это было задано 4 месяца назад, поэтому я не знаю, если вы все еще заинтересованы: -)

Концептуальная причина отсутствия поддержки двунаправленных индексированных ассоциаций проста: индекс имеет смысл только в одном направлении.

Например, рассмотрим класс Invoice со свойством Lines типа IList<Line>.

Установка line.Invoice = anInvoice не имеет смысла, так как невозможно определить, каким должен быть индекс списка.

Имейте в виду, что NHibernate "видит" двунаправленные отношения как два разных отношения (отсюда необходимость inverse="true" на стороне, не отвечающей за ее поддержание)

Обходной путь - это именно то, что вы предложили: свойство Position / Index / etc в дочернем классе.

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