C# 使用自动映射的DTO映射

C# 使用自动映射的DTO映射,c#,.net,linq,c#-4.0,linq-to-entities,C#,.net,Linq,C# 4.0,Linq To Entities,我有3个表tableA、tableB和tableC,其中tableB有来自tableA的外键 tableC有一个来自tableB的外键,与tableD类似 我有一个linq查询,我得到的数据如下 : 我在这里得到了正确的数据。但当我将其映射到DTO时,如下所示: { List<DTOtableA> dtotest = new List<DTOTableA>(); //From DB var list = _repo.GetData(); dtotest = list.S

我有3个表tableA、tableB和tableC,其中tableB有来自tableA的外键 tableC有一个来自tableB的外键,与tableD类似

我有一个linq查询,我得到的数据如下 :

我在这里得到了正确的数据。但当我将其映射到DTO时,如下所示:

{
List<DTOtableA> dtotest = new List<DTOTableA>();
//From DB
var list = _repo.GetData();

dtotest = list.Select(p=>Mapper.Map(p,new DTOTableA())).ToList();
}
{
List dtotest=新列表();
//来自数据库
var list=_repo.GetData();
dtotest=list.Select(p=>Mapper.Map(p,newdtotablea()).ToList();
}
在这里,只有tableA的数据被填充到dtoTest中,即使DTOTableA在其类中引用了DTOTableB,并且DTOTableB也引用了DTOTableC


有什么解决办法吗?

我想,您不需要mapper。您可以这样使用:

Listdtotest=await dbContext.tableA.Include(p=>p.tableB.Select(q=>q.tableC.Select(s=>s.tableD)).toListSync()

dtotest[0]。表B.attributeOfTableB

{
List<DTOtableA> dtotest = new List<DTOTableA>();
//From DB
var list = _repo.GetData();

dtotest = list.Select(p=>Mapper.Map(p,new DTOTableA())).ToList();
}