Обновите Child ForeignKey с помощью сеанса без состояния Nhibernate - PullRequest
0 голосов
/ 08 сентября 2011

Я понимаю, что при использовании сеанса без сохранения состояния необходимо явно сохранить ассоциацию объектов (дочерний)

Если у меня есть следующие объекты:

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 идобавив к нему одного потомка, я затем сохраню родителя и потомка, используя следующие операторы:

statelesssession.Update(parentInstance);
statelesssession.Insert(parentInstance.Childs.Last());

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

Как я могу вручную записать связь, используя сеанс без сохранения состояния?

1 Ответ

0 голосов
/ 09 сентября 2011

Я не вижу 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 при добавлении дочернего элемента к родителю.

Другое дело, учитывая последовательность описываемых вами событий («Я создаю экземпляр родительского элемента и добавляю одного дочернего элемента") я бы ожидал увидеть Insert для родителя вместо Update.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...