我有2个实体:
public class Parent
{
public virtual string Number { get; set; }
public virtual IList<Child> Children { get; set; }
public Parent()
{
Phones = new List<Child>();
}
}
public class Child
{
public virtual string Number { get; set; }
public virtual Parent Parent { get; set; }
}
和映射:
child
public ChildMap()
{
Map(x => x.Number).Not.Nullable();
References(x => x.Parent).Nullable().LazyLoad().Cascade.None();
}
和 parent
public ParentMap()
{
Map(x => x.Number).Not.Nullable();
HasMany(x => x.Children).Inverse().Cascade.All();
}
但是当我将子项插入父项时,它在父外键中为null .
var p = rep.Get(g => g.Id == 1);
Enumerable.Range(0, 100).Select(s => new Child()
{
Number = s.ToString()
}).ToList().ForEach(p.Children.Add);
rep.Update(p);
rep.Flush();
在post -1426152_
但是像这样插入链接 test.Orders.Add(new Order("test") { Company = test });
绝对 not true 方式,所以我需要帮助,任何想法?
3 回答
您在
Parent
和Child
之间设置了双向关系,但是当您在Parent
上将子项添加到Children
集合时,您没有在每个子项上设置Parent
属性 .我建议的第一件事是质疑这种关系是否需要双向 - 典型的使用是否与儿童独立于父母?您需要在从
Child
到Parent
的方向上导航对象图吗?是Parent
和Child
Aggregate Roots ?处理双向关系有几种不同的方法 . 一种方法是定义添加和删除方法,将
Child
添加到Children
集合并在每个子项上设置Parent
属性,并删除将子项直接添加到集合的功能,方法是将其设置为IEnumerable<Child>
(或IReadOnlyCollection<Child>
,或类似例如,使用IList<Child>
支持字段应修改ParentMap以使用支持字段
改成:
答案是
Without inverse