繁体   English   中英

从 EF Core 中的父对象访问子对象

[英]Accessing child object from parent object in EF Core

我已经搜索了整个网络,但仍然无法使其正常工作。

我需要的是一个简单的列表,如下所示:

  • 父母姓名1
  • 孩子姓名1
  • 孩子姓名2
  • 父母姓名2
  • 孩子名字3

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

现在,我使用强类型的 ViewModel,Intellisense 甚至通过 Parent.Child.Property 建议 Child 属性,但是当我运行程序时,我得到一个“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 中做些什么吗? 我欢迎任何帮助。 谢谢!

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

public int EmployeeAreaId {get; set;}

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

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

这将返回一个员工区域列表,包括子列表。

使用 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

您必须首先通过覆盖 OnModelCreating 或按照约定正确定义外键:

public int EmployeeAreaId {get; set;}

如果您使用的是强类型视图模型,则需要使用 EFCore 投影( https://entityframeworkcore.com/querying-data-projection ),代码将如下所示(替换为您的视图模型名称):

db.EmployeeAreas.Select(e => new YourViewModel{
  ParentName = e.AreaName,
  ChildNames = e.EmployeeNames.Select(en => new List<string>{
    EmployeeName = en.Name
  }).ToList();
}).ToList();

如果这是 Json,它将如下所示:

[
  {
    ParentName : "ParentName1",
    ChildNames ; ["ChildName1","ChildName2"]
  },
  {
    ParentName : "ParentName2",
    ChildNames ; ["ChildName3"]
  }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM