Deseo obtener registros de la base de datos utilizando EF y asignar los valores a una clase de DTO. Considere las siguientes tablas para una consulta de Linq.Asignación de resultados de consulta de Linq a una clase de DTO
TableA, TableB, TableC
Para cada registro TableA hay varios registros en la Tabla B. Para cada registro TableB hay múltiples registros en TableC. Ahora mis dtos ven así
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
}
mi consulta
LINQ se ve algo como estovar qry = from ent in TableA
select ent;
En mi asignación bucle de clase I por los elementos de resultado de la consulta de este modo:
foreach (var dataitem in query)
{
TableA_DTO dto = new TableA_DTO();
dto.tableA_rowid = dataitem.ID;
//remaining field definitions here
}
Ahora esto funciona para todos los campos en la Tabla A donde saca un registro de la base de datos y establece las propiedades requeridas en TableA_DTO para cada campo en la tabla TableA. También quiero rellenar todos los registros coincidentes en TableB en el campo de propiedad TableA con el nombre TableB_records y también en TableB_DTO todos los registros coincidentes desde TableC en la propiedad TableB_DTO con el nombre TableC_records
¿Se puede hacer esto? ¿Qué necesito cambiar? ¿Es la consulta LINQ o la forma en que hago mi asignación
Gracias por su tiempo ...
¿Hay alguna razón por la que no pueda usar Entity Framework POCO's (también conocido como DbContext, a veces denominado erróneamente Code First)? Básicamente, ¿puedes eliminar la necesidad de DTO y usar EF POCO en su lugar? – JMarsch
¿Ha considerado usar AutoMapper? Dependiendo de cuán diferentes sean sus DTO, esto podría ser tan simple como dos o tres líneas de código para hacer el mapeo. – Robaticus
@jMarsch: La base de datos ya está allí, así que fue por el camino de Edmx – user20358