0

假设我们有这两个类:

public class Parent
{
    public int ID { get; set; }
    public virtual ICollection<Child> Children { get; set; }
}

public class Child
{
    public int ID { get; set; }
    public int ParentID { get; set; }
    public virtual Parent Parent { get; set; }
}

假设我使用以下方法创建每个:

//Create a parent with new children
public void CreateParent(MyDbContext context)
{
    context.Parents.Add(new Parent
    { 
         Children = new List<Child>() 
         { 
              new Child(),
              new Child(),
              new Child()                
         }
    });

    context.SaveChanges();
}

//Create a child with a new parent
public void CreateChild(MyDbContext context)
{
    context.Children.Add(new Child
    { 
         Parent = new Parent()
    });

    context.SaveChanges();
}

这些方法中的任何一个都会创建具有适当分配外键的父对象和子对象吗?我的直觉告诉我 CreateParent 会起作用,但 CreateChild 不会。

谢谢!

4

2 回答 2

0

是的,这两种方法都将使用 ParentID 外键集创建父记录和子记录。如果您运行例如第一个,您将获得以下结果:

在此处输入图像描述

正如另一个答案所说,您不需要 ParentID 但是实体框架会将其识别为用于父关联的外键,并且您不必在子属性和父属性中使用 virtual 关键字来制作您的代码工作,但是如果你不想延迟加载使用这些属性,你将需要它们。

于 2014-05-21T21:10:08.273 回答
0

是的,这两个功能都可以正常工作,添加父记录和子记录,并且它们之间具有正确的关联。

运行 CreateParent 将产生一个新的父记录和三个与其关联的子记录(通过 ParentID)。

运行 CreateChild 将创建一个新的 Child 和一个新的 Parent 记录,正确关联。

于 2014-05-21T21:46:06.130 回答