Chcę uzyskać rekordy z bazy danych za pomocą EF i przypisać wartości do klasy DTO. Rozważ poniższe tabele dla zapytania Linq.Mapowanie wyników Linq Query do klasy DTO
TABLEA, TableB, TableC
Dla każdego rekordu TABLEA istnieje wiele rekordów w TableB. Dla każdego rekordu TableB istnieje wiele rekordów w TableC. Teraz moje DTOs wyglądać następująco
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
}
mojej kwerendy LINQ wyglądać tak
var qry = from ent in TableA
select ent;
W moim mapowania klasy I pętli poprzez elementów w wyniku kwerendy tak:
foreach (var dataitem in query)
{
TableA_DTO dto = new TableA_DTO();
dto.tableA_rowid = dataitem.ID;
//remaining field definitions here
}
teraz działa to dla wszystkich pól w Tabeli A, gdzie wyprowadza jeden rekord z bazy danych i ustawia wymagane właściwości w TableA_DTO dla każdego pola w tabeli TableA. Chcę również wypełnić wszystkie pasujące rekordy w tabeli B w polu właściwości TableA przez nazwę TableB_records, a także w TableB_DTO wszystkie pasujące rekordy od TableC w TableB_DTO właściwości o nazwie TableC_records
Czy można to zrobić? Co muszę zmienić? Czy jest kwerenda LINQ lub sposób dołożę mapowanie
Dziękuję za poświęcony czas ...
Czy jest jakikolwiek powód, dla którego nie można używać Entity Framework POCO (aka DbContext, czasami błędnie nazywanego Code First)? Zasadniczo, czy możesz wyeliminować potrzebę DTO i użyć EF POCO? – JMarsch
Czy rozważałeś użycie AutoMappera? W zależności od tego, jak różne są twoje DTO, może to być tak proste jak dwa lub trzy linie kodu do wykonania mapowania. – Robaticus
@jMarsch: Baza danych już tam jest, więc poszła droga edmx – user20358