2010-01-05 3 views
1

Я ве получил следующую установку:NHibernate Parent/Child отношение

public class ParentEntity 
{ 
    public ICollection<ChildEntity> {get; set; } 
} 

public class ChildEntity 
{ 
    // do i need to the parent here? 
} 

мне удалось сохранить ParentEntity и каскадное сохранение в добавленных дочерних объекты, которые были сохранены, а также. Но в таблице db ссылка родительского элемента для ребенка была установлена ​​так, чтобы разрешить NULL. При установке значения NOT NULL сохранение происходит с ошибкой, так как ParentId в дочерней таблице имеет значение NULL.

Что там происходит? ;)

Когда

+1

1. Вам не нужен родительский элемент для отображения. Может быть, вам это нужно для чего-то еще? 2. Мы не можем дать вам ответ, если вы не сообщите, как вы делаете mappig. – Paco

ответ

1

Вы должны сопоставить обе стороны отношений нормально, а при добавлении ребенка в коллекцию родителей, вы должны также установить родительское свойство на ребенке. Как правило, вы бы этого добиться, написав метод так:

public void AddChild(ChildEntity child) 
{ 
    this.Children.Add(child); 
    child.Parent = this; 
} 

NHibernate сохраняется столбец ParentID в таблице детей на основе преобразованного свойства в классе ChildEntity. Определение отношения «один ко многим» позволяет NHibernate загружать коллекцию из базы данных на основе значений в этой колонке

+3

Вы не делаете этого нормально. Когда вы сделаете это ради всего, почти все ваши сущности будут связаны друг с другом (код спагетти, когда приложение станет больше), и использовать ограниченный контекст невозможно. Некоторые отношения должны быть двунаправленными, особенно когда родитель и ребенок являются совокупными корнями, но когда родитель несет ответственность за своих детей, что в большинстве случаев, однонаправленное отношение будет лучше. – Paco

0

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

Проблема: nHibernate создает объект коллекции (например, IList), и вы не можете переопределить или прослушать события добавления основных коллекций.

Это становится проблемой только потому, что это требуется инфраструктурой WCF RIA Services.

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