nHibernate вставляет один ко многим, но не обновляет - PullRequest
1 голос
/ 14 ноября 2009

Вместо того, чтобы войти в код, у меня есть простой вопрос. Поведение по умолчанию для простого «один ко многим» заключается в том, что он вставляет дочернюю запись, а затем обновляет столбец внешнего ключа с помощью родительского ключа.

Кто-нибудь когда-нибудь имел один-ко-многим, где дочерний объект вставляется, но не обновляется, в результате чего в моей таблице есть строка с нулем в столбце внешнего ключа?

Я хочу поведение по умолчанию для стандартного «один ко многим». Я не хочу добавлять родителя в качестве свойства к ребенку.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2009

Я думаю, вам нужно установить родительскую ссылку в дочернем элементе.

class Parent {
  public virtual IList<Child> Children;
}

class Child {
  public virtual Parent Parent;
}

Parent p = new Parent();
Child c = new Child();
c.Parent = p;
p.Children = new List<Child>();
p.Children.Add(c);

Теперь, когда вы сохраните этот временный объект p, у вас будет правильный внешний ключ в дочерней таблице.

0 голосов
/ 14 ноября 2009

Это произойдет, если у вас не будет cascade = "save-update" в вашем наборе / сумке

или если вы установите FlushMode сеанса на «None» или «Commit» и сохранил дочерний элемент, используя ваш childRepository, и не стал сохранять объект, содержащий коллекцию, используя свой репозиторий.

...