[英]Accessing child object from parent object in EF Core
我已经搜索了整个网络,但仍然无法使其正常工作。
我需要的是一个简单的列表,如下所示:
我有一张父对象表和一个子对象表。 在 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.