Мне интересно, какой лучший дизайн будет для продолжения нового дочернего объекта с NHibernate без случайной перезаписи родителя в базе данных.NHibernate: Как сохранить новый объект без перезаписи родителя:
У меня есть проблема в том, что ребенок лицо будет выглядеть примерно так:
class Child
{
Parent Parent;
// other fields
}
Моя проблема заключается в том, что ребенок был подан из слоя пользовательского интерфейса вместе с идентификатором родителя, и это означает, что что Parent ref в основном не инициализирован: у него будет ID, но все остальное будет нулевым, потому что единственный способ заполнить его поля - это дополнительная поездка в базу данных, чтобы прочитать их.
Теперь, если я вызываю Session.SaveOrUpdate(child)
на NHibernate, что произойдет с родителем. Я не хочу, чтобы NHibernate выполнял каскад, за исключением неинициализированного родителя, поскольку это просто уничтожило бы данные в базе данных. Как люди подходят к этой проблеме? Любые лучшие практики?
OK спасибо.Это будет означать дополнительную обратную связь с базой данных для получения родительского элемента, хотя я не собираюсь ничего делать с родительскими данными, чего я бы предпочел избежать. Нет лучшего способа избежать этого? – PhantomDrummer
Используйте Load() как Trygve, чтобы избежать загрузки ненужных данных. – UpTheCreek
Похоже, что происходит то, что дети заселяются непосредственно в пользовательский интерфейс по запросу без какого-либо отношения к родительскому. Предлагается общий принцип дизайна, в котором у вас никогда не бывает детей за пределами родителя. Вы, конечно, не добавляете новых детей, не проходя через родителя. – Sisyphus