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