Как добавить отношения (nhibernate) - PullRequest
0 голосов
/ 17 декабря 2010

Зачем мне нужно добавлять отношения для ребенка и родителя?

Child child = Session.Get(1);
Parent parent = Session.Load(1);
parent.Children.Add(child);
child.Parent = parent;

Отлично работает без parent.Children.Add (child), если используется inverse = true, и мне не нужна коллекция Children в текущем сеансе (сеанс на веб-запрос). Вы всегда добавляете отношения для ребенка и родителя?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Установка child.Parent = parent достаточна для сохранения отношений.

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

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

2 голосов
/ 17 декабря 2010

Надеюсь, я вас правильно понял.

class Parent { List Children {get;set;} class Child { Parent Parent {get;set;}

ANS1.В этом сценарии Inverse указывает платформе nhibernate оставить механизм управления отношениями [Parent-Child] с Child (в основном это касается того, какой объект отвечает за удаление / обновление Child).С атрибутом Inverse в свойстве Children свойство Child отвечает за себя, в противном случае Parent отвечает за удаление Child.

ANS2.В большинстве случаев вам не нужны оба свойства (Children, Parent) (они нужны, если вы укажете inverse = true для Children).Это зависит только от функциональности, которую вы хотите получить.

Это кратко ответит на ваш вопрос?

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