首页 > 解决方案 > 从 EF Core 中的父对象访问子对象

问题描述

我已经搜索了整个网络,但我仍然无法让它工作。

我需要的是一个看起来像这样的简单列表:

我有一个父对象表和一个子对象。在 Child 对象表中,有一个外键 ParentId。

现在,我使用强类型 ViewModel 和 Intellisense 甚至通过 Parent.Child.Property 建议子属性,但是当我运行程序时,我得到一个“NullReferenceException:对象引用未设置为对象的实例。”。

我的父类如下所示:

    public class EmployeeArea
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        public int? StudioCode { get; set; }

        public string AreaName { get; set; }

        public List<EmployeeName> EmployeeNames { get; set; }
    }
}

我的 Child 类看起来像这样:

    public class EmployeeName
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        public string Name { get; set; }

        public int AreaId { get; set; }
    }
}

我需要在 DbContext ModelBuilder 中做些什么吗?我欢迎任何帮助。谢谢!

标签: c#asp.net-mvcentity-frameworkasp.net-core

解决方案


好吧,我看不到您的查询,但我建议以下内容。首先,外键应该是:

public int EmployeeAreaId {get; set;}

那么你有两个选项可以从数据库中获取数据。如果您使用的是 EF,则:

db.EmployeeArea.Include(e => e.EmployeeName).ToList();

这将返回一个包含子列表的employeeArea 列表。

使用 Linq 就像:

var employeeArea = (from e in db.EmployeeArea
                    select new EmployeeArea
                               {
                                  Id = e.Id
                                  // continue populating the model properties
                                  EmployeeNames = db.EmployeeName.Where(e => 
                                  e.EmployeeAreaId == e.Id).ToList(),
                               }).ToList()

请原谅这里的任何错字。希望能帮助到你。

确保在遍历父母时检查他们的孩子列表是否为null


推荐阅读