2010-09-19 5 views
2

Представьте, что у меня есть отношения родителя/ребенка, управляемые NHibernate.NHibernate Выдача неплатежеспособных сиротских заявлений

Я получаю родительский объект из обратной передачи MVC, который редактирует его свойства; Я хочу сохранить только родителя в базу данных, не загружая детей из базы данных.

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

Когда я сохраняю модифицированный родительский элемент (ID = 100), NHibernate выдает инструкцию SET SET Child.ParentId = NULL WHERE Child.ParentId = 100. Я не хочу, чтобы это произошло, потому что могут быть действительные дети. Мне не нужно было загружать их из базы данных до сохранения, чтобы предотвратить их сиротство.

беглого отображения выглядеть следующими образом (истинные имена сущностей обобщенных для этой должности):

public ParentMapping() 
    { 
     Table("Parent"); 
     Id(x => x.Id).Column("Id").GeneratedBy.Identity(); 
     Map(x => x.ParentProperty1).Column("ParentProperty1").Not.Nullable(); 

     HasMany(x => x.Children).Cascade.None(); 
    } 

    public ChildMapping() 
    { 
     Table("Children"); 
     Id(x => x.Id).Column("Id").GeneratedBy.Identity(); 

     Map(x => x.ChildProperty1).Column("ChildProperty1").Not.Nullable(); 

     References(x => x.Parent).Column("Parent_Id").Not.Nullable().Fetch.Select(); 
    } 

Подводя итог, я хочу, чтобы сохранить обновленный родительский экземпляр, который был извлеченный из ранее ISession (и передается в браузер и обратно через модель MVC); его свойство «Дети» равно нулю, но на самом деле в базе данных есть много детей. Я не хочу, чтобы NHibernate вообще выпускал любые изменения в таблице «Дети».

Я экспериментировал с Cascade.None() и LazyLoad() в надежде, что это подтолкнет NHibernate к поведению по-другому, но не повезло.

Любое понимание будет оценено по достоинству. Благодаря!

Джефф

+0

Вы вряд ли получите ответы на многие вопросы, если вы не согласны с ним –

ответ

0

Вы должны указать Inverse() на есть много, чтобы сказать NHibernate не беспокоиться об этой стороне коллекции

+0

I Попробуй - спасибо! – blaster

+0

Это отлично работало. – blaster

Смежные вопросы