C# 实体框架-将子对象添加到父对象

C# 实体框架-将子对象添加到父对象,c#,entity-framework,ef-code-first,code-first,C#,Entity Framework,Ef Code First,Code First,我试图首先实现一个简单的实体框架和代码一对多关系。 我用一种简单的方式设置父类: public class Parent { [Key] public long ParentId { get; set; } public ICollection<Child> Child { get; set; } public Parent() { Child = new HashSet<Child>(); } } 我的

我试图首先实现一个简单的实体框架和代码一对多关系。 我用一种简单的方式设置父类:

public class Parent
{
    [Key]
    public long ParentId { get; set; }
    public ICollection<Child> Child { get; set; }

    public Parent()
    {
        Child = new HashSet<Child>();
    }
}
我的控制器是由EF生成的。 问题是,当我在post方法中使用父Id创建子对象时,该Id在数据库中设置,但当我获取父对象时,子对象列表为空

我已尝试在控制器的父级中添加子级,如下所示:

db.parent.find(child.parentId).Child.Add(child);
这显然没有效果

子对象中的父对象为null,父对象中的子列表为空

如何在父集合中获取子集合


谢谢大家!

据我所知,禁用代理创建也会影响延迟加载。延迟加载只能在代理类中工作。如果没有,则EF无法控制访问属性的时间


获取子对象的唯一方法是使用Include

调用context.SaveChanges的“立即加载”命令。您需要将子对象属性更改为public virtual ICollection Child{get;set;}Hi!谢谢你的关注,我确实打电话给SaveChanges。而添加虚拟机也无助于解决我的问题。我可以补充一点,我关闭了代理创建,以便序列化结果。谢谢你的编辑。嗨,谢谢你的回答!我试图把孩子也包括在内,但问题是一样的。我认为问题在于,在父级中没有设置子级,而不仅仅是获取它。没有代理创建,您将不会有延迟加载功能。这意味着myParent.Child和myChild.Parent将永远不会由EF填充。您需要在DB调用中显式添加它们:例如,DB.Parent.Includem=>m.Child.SingleOrDefaultm=>m.Id==myId
db.parent.find(child.parentId).Child.Add(child);