nHibernate вставляет один ко многим, но не обновляет

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

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

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

Благодарю.

2 ответа

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

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

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

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 у вас будет правильный внешний ключ в дочерней таблице.

Другие вопросы по тегам