Обновите Child ForeignKey с помощью сеанса без состояния Nhibernate
Я понимаю, что при использовании сеанса без сохранения состояния необходимо явно сохранить ассоциацию объекта (дочерний элемент)
Если у меня есть следующие объекты:
public class Parent()
{
public int Id {get;set;}
public string Name {get;set;}
public IList<Child> Childs {get;set;}
}
public class Child()
{
public int Id {get;set;}
public string Name {get;set;}
}
Я изменяю экземпляр parent и добавляю к нему одного потомка, затем сохраняю parent и child, используя следующие операторы:
statelesssession.Update(parentInstance);
statelesssession.Insert(parentInstance.Childs.Last());
В результате этого успешно обновляется родительский элемент и создается дочерняя запись, однако поле Parent_Id из дочерней таблицы остается пустым, поэтому связь не записывается.
Как я могу вручную записать связь, используя сеанс без сохранения состояния?
1 ответ
Я не вижу many-to-one
собственность на Child
это указывает на Parent
, Это то, что NHibernate будет использовать для сохранения Parent_id
колонка. Тебе нужно:
public class Child
{
public int Id {get;set;}
public Parent Parent {get;set;} // this is missing
public string Name {get;set;}
}
... и соответствующее отображение NHibernate. Также убедитесь, что вы установили значение child.Parent
когда вы добавляете ребенка к родителю.
Другое дело, учитывая последовательность событий, которые вы описываете ("я создаю экземпляр parent и добавляю к нему одного потомка"), я ожидал увидеть Insert
для родителя вместо Update
,