我有以下设置:
public class ParentEntity
{
public ICollection<ChildEntity> {get; set; }
}
public class ChildEntity
{
// do i need to the parent here?
}
我设法保存ParentEntity,并将保存级联到已保存的已添加子实体。但是在db表中,子项的ParentId引用被设置为允许NULL。当将其设置为NOT NULL时,由于子表中的ParentId为NULL,因此保存失败。
那里发生了什么? ;)
何时
答案 0 :(得分:1)
您应该正常映射关系的两侧,当您将子项添加到父级的集合时,还应该在子级上设置父属性。通常你会通过写一个这样的方法来实现这个目的:
public void AddChild(ChildEntity child)
{
this.Children.Add(child);
child.Parent = this;
}
NHibernate根据ChildEntity类中的映射属性在Child表中保留ParentId列。一对多关系的定义仅允许NHibernate根据此列中的值从数据库加载集合
答案 1 :(得分:0)
我遇到了同样的问题,需要让nHibernate公开外键列,或者通过集合在类中进行。
问题:nHibernate创建集合对象(例如IList),你不能覆盖或监听基本集合的添加事件。
这只是一个问题,因为它是WCF RIA Services框架所必需的。