实体框架:父母子女&子女间关系

时间:2015-10-08 00:26:01

标签: c# entity-framework relationship

我是实体框架和数据库关系的新手。我已经创建了一个实体框架代码第一个模型,并设法实现了一个有效的层次结构。然而,我正在努力解决我的孩子间关系。结构如下:

  1. 父对象
  2. 1.1“ChildA”儿童(可以有任意数量的这些)

    1.2“ChildB”儿童(可以有任意数量的这些)

    因此,“ChildA”和“ChildB”共享相同的父对象。如果父项被删除,则这两个集合也将被删除。现在是我正在努力的部分。如何定义“ChildA”和“ChildB”之间的关系?

    “ChildB”引用“ChildA”的实例,我希望它“在同一级别”,即“ChildA”不一定是“ChildB”的父级。这是可能的,还是“ChildA”必须是“ChildB”的父母?我不想在这里建立父母关系的原因是由于其他孩子可以在这个级别上被引入,例如“ChildB”可以指“ChildA”,“ChildC”和“ChildD”的实例。从“ChildB”到一个(或多个)其他孩子的关系将始终是单向的,即“ChildB”将从其他孩子中提取信息并在内部使用。

    当前代码:

    Public class Parent 
    {
        public int ParentID {get;set;}
        public virtual ObservableCollection<ChildA> ChildrenA {get;set;}
        public virtual ObservableCollection<ChildB> ChildrenB {get;set;}
    }
    
    public class ChildA
    {
        public int ChildAID {get;set;}
    }
    
    Public class ChildB
    {
        public int ChildBID {get;set;}
        public ChildA childA {get;set;}
        public int childAID {get;set;}
        [...some calculations using values/references from childA...]
    }
    
    [...More of these children defined...]
    

1 个答案:

答案 0 :(得分:0)

我认为您要创建的内容是ChildAChildB之间的一对一关系,因此您必须告诉EF这种关系将如何运作。

modelBuilder.Entity<ChildA>()
        .HasOptional<ChildB>(u => u.ChilbB)
        .WithOptionalDependent(c => c.ChildA).Map(p => p.MapKey("ChildAID"));

查看文档以获取更多信息:

http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx