我想使用EF从数据库获取记录并将值分配给DTO类。请考虑Linq查询的以下表格。将Linq查询结果映射到DTO类
表A,表B,表C
对于每个表A记录有TableB中多条记录。对于每个TableB记录,TableC中有多个记录。 现在我的DTO的这个样子
public class TableA_DTO
{
public int tableA_rowid { get; set; }
//remaining tableA field definitions
public List<TableB_DTO> TableB_records { get; set; }
}
public class TableB_DTO
{
public int tableB_rowid { get; set; }
//remaining tableB field definitions
public List<TableC_DTO> TableC_records { get; set; }
}
public class TableC_DTO
{
public int tableC_rowid { get; set; }
//remaining tableC field definitions
}
我的LINQ查询看起来查询结果是这样的
var qry = from ent in TableA
select ent;
在我的映射类我遍历项目,像这样:
foreach (var dataitem in query)
{
TableA_DTO dto = new TableA_DTO();
dto.tableA_rowid = dataitem.ID;
//remaining field definitions here
}
现在这适用于TableA中的所有字段,它从数据库中提取一条记录,并为表TableA中的每个字段在TableA_DTO中设置所需的属性。我还希望在TableA属性字段中通过名称TableB_records填充TableB属性字段中的所有匹配记录,并且还在TableB_DTO中填充TableB_DTO属性中TableC的所有匹配记录名称TableC_records
可以这样做吗?我需要改变什么?难道LINQ查询或我做我的映射
感谢您的时间的方式......
是否有任何理由不能使用实体框架POCO(又名DbContext,有时错误地称为Code First)?基本上,你能否消除对DTO的需求,并使用EF POCO? – JMarsch 2012-02-17 17:56:21
您是否考虑过使用AutoMapper?根据您的DTO的不同,这可能与执行映射的两行或三行代码一样简单。 – Robaticus 2012-02-17 19:47:51
@jMarsch:数据库已经存在,所以去了edmx的方式 – user20358 2012-02-18 07:27:57