Cześć,
Mam pewien problem jak rozwiązać pewien problem z join w moim zapytaniu a mianowicie potrzebuje pewną rzecz wyciągnąć jeszcze z bazy :
class Car{
int Id;
string CarName;
....
....
int OwnerId;
}
class CarDto{
int Id;
string CarName
...
...
int OwnerId;
string PersonExtraInformation;
}
Aby uzupełnić PersonExtraInformation muszę sięgnac do funkcji w sql GetPersonInformation.
using (db= new MyDbContext()){
var model = db.Car.ProjectTo<CarDto>(); //uzupelniamy cały CarDto oprócz PersonExtraInformation
}
I jak teraz uzupelnić to pole korzystajac z funkcji tabelarycznej ? próbuje coś takiego ale czy to dobry pomysł ???
using (db= new MyDbContext()){
var carDto= db.Car.ProjectTo<CarDto>(); //uzupelniamy cały CarDto oprócz PersonExtraInformation
var result = (
from dto in carDto
join pei in db.PersonExtraInformation on dto.OwnerId equals pei .PersonId
select new CarDto(dto ){PersonExtraInformation = pei.PersonExtraInformation }
).ToList();
}
Minusem tego rozwiazania jest ze dwukrotnie wystepuje mapowanie prawie calego obiektu, najpierw z Car na CarDTO a pozniej CarDTO na CarDTO. Czy da sie to zrobic lepiej ?
mad_penguinjak EF ma wygenerować sql, w którym wykona się new CarDto(dto)
może po prostu utworzyć dto dwukrotnie - najpierw wersję pośrednią bez wypełnionego PersonExtraInformation, która następnie zostanie przekazana do konstruktora nowego obiektu i uzupełniona zostanie dodatkowo kolumna PersonExtraInformation. Dosyć karkołomne, sam jestem ciekaw, czy EF to potrafi :) ale po EF Core 3.x spodziewam się, że tak i wszystko pójdzie elegancko w 1 zapytaniu sql