Обновление проблемы в дочерней таблице с помощью nhibernate - PullRequest
0 голосов
/ 05 декабря 2011

В nhibernate у меня две таблицы: родительская и дочерняя ...

Parent -> parentid, имя

Child -> childid, name, parentid

отношение -> один ко многим

Если я вставлю запись в родительскую таблицу одновременно, я вставлю много записей вдочерняя таблица без каких-либо проблем ..

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

Ниже приведен код сопоставления

Родитель:

HasMany(x => x.Child)
              .Not.LazyLoad()
              .Cascade.All();

Ребенок: References(x => x.Parent).Not.LazyLoad();

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

Я нашел решение:

Измените родительский файл сопоставления с помощью приведенного ниже кода, он удалит старые дочерние данные и вставит новую запись в дочернюю таблицу

HasMany(x => x.Child)
              .Not.LazyLoad()              
              .Cascade.AllDeleteOrphan();
0 голосов
/ 05 декабря 2011

Весьма вероятно, что использовался генератор идентификаторов у детей.SaveOrUpdate не видит их как постоянные и пытается вставить их.часто UnsavedValue("0") может сделать трюк

Также было бы лучше иметь инверсный набор, чтобы сообщить NH, что Чайлдс ответственны за ассоциацию.

HasMany(x => x.Child)
      .Not.LazyLoad()
      .Inverse()
      .Cascade.All();

// eg: in Parent class
public void Add(Child child)
{
    Childs.Add(child);
    child.Parent = this;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...