Обновите 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,

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