2 回答
TA贡献1784条经验 获得超7个赞
我将从定义 DTO 对象开始,因为直接返回数据库对象不是最佳实践,您通常不希望重新查看所有字段,它还为您在不破坏 API 合同的情况下更改数据库结构提供了更大的灵活性。此外,您需要将您的集合包装在 Sections 属性中,因此您不能只返回对象列表。所以,你需要这样的结构:
public class SectionsResponse
{
public List<SectionDTO> Sections {get;set;}
}
public class SectionDTO
{
public string SectionID {get;set;}
.... add other properties
public List<ContentDTO> sectionContent {get;set;}
}
public class ContentDTO
{
... define your properties
}
下一步将是实现数据库对象和 DTO 之间的映射。为此,您可以使用现有的库,例如AutoMapper
至于使用数据库,您可以应用从实体框架急切加载。简而言之,它看起来像:
return db.Sections.Include(x => x.Content);
或者用 DTO 和 AutoMapper 包裹:
return new SectionsResponse() { Sections = mapper.Map<List<Section>, List<SectionDTO>>(db.Sections.Include(x => x.Content)) };
TA贡献1828条经验 获得超4个赞
如果您使用的是实体框架 (EF) 并且您的表关系类型是一对多,您可以在 lambda 表达式中使用Include来返回带有第二个表数据的第一个表。
return context.Entity1st.Include(x => x.Entity2nd);
或者你也可以这样做:
var entities = context.Entity1st;
foreach (var entity in entities)
{
entity.Entity2nd = context.Entity2nd.Where(x => x.Entity1stId == entity.Id);
}
return entities;
- 2 回答
- 0 关注
- 185 浏览
添加回答
举报