Entity Framework - Czy istnieje sposób na automatyczne zachęcanie podrzędnych jednostek bez Include ()?
Czy istnieje sposób na udekorowanie klas POCO w celu automatycznego pobierania i ładowania podrzędnych jednostek bez konieczności ich używaniaInclude()
za każdym razem, kiedy je ładujesz?
Powiedz, że mam samochód klasy, z właściwościami złożonymi dla kół, drzwi, silnika, zderzaka, systemu Windows, układu wydechowego itp. W mojej aplikacji muszę załadować mój samochód z mojego DbContext 20 różnych miejsc z różnymi zapytaniami itp. nie chcę określać, że chcę uwzględniać wszystkie właściwości za każdym razem, gdy chcę załadować mój samochód.
chcę powiedzieć
List<Car> cars = db.Car
.Where(x => c.Make == "Ford").ToList();
//NOT .Include(x => x.Wheels).Include(x => x.Doors).Include(x => x.Engine).Include(x => x.Bumper).Include(x => x.Windows)
foreach(Car car in cars)
{
//I don't want a null reference here.
String myString = car.**Bumper**.Title;
}
Czy mogę jakoś udekorować moją klasę POCO lub mojąOnModelCreating()
lub ustaw konfigurację w EF, która powie, żeby załadować wszystkie części mojego samochodu, gdy ładuję samochód? Chcę to robić z niecierpliwością, więc rozumiem, że wyłączenie wirtualnych właściwości nawigacji. Wiem, że NHibernate obsługuje podobną funkcjonalność.
Zastanawiam się, czy coś mi brakuje. Z góry dziękuję!
Twoje zdrowie,
Nathan
Podoba mi się poniższe rozwiązanie, alezastanawiam się, czy mogę zagnieździć wywołania do metod rozszerzenia. Na przykład powiedzmy, że mam podobną sytuację z silnikiem, w którym ma wiele części, których nie chcę umieszczać wszędzie. Czy mogę zrobić coś takiego? (Nie znalazłem jeszcze sposobu, żeby to zadziałało). W ten sposób, jeśli później dowiem się, że Engine potrzebuje FuelInjectors, mogę go dodać tylko w BuildEngine i nie trzeba go dodawać w BuildCar.Także, jeśli mogę zagnieździć połączenia, jak mogę zagnieździć połączenie z kolekcją? Chcesz wywołać BuildWheel () dla każdego z moich kół w moim BuildCar ()?
public static IQueryable<Car> BuildCar(this IQueryable<Car> query) {
return query.Include(x => x.Wheels).BuildWheel()
.Include(x => x.Doors)
.Include(x => x.Engine).BuildEngine()
.Include(x => x.Bumper)
.Include(x => x.Windows);
}
public static IQueryable<Engine> BuildEngine(this IQueryable<Engine> query) {
return query.Include(x => x.Pistons)
.Include(x => x.Cylendars);
}
//Or to handle a collection e.g.
public static IQueryable<Wheel> BuildWheel(this IQueryable<Wheel> query) {
return query.Include(x => x.Rim)
.Include(x => x.Tire);
}
Oto kolejny bardzo podobny wątek na wypadek, gdyby był pomocny dla kogokolwiek innego w tej sytuacji, ale nadal nie radzi sobie z wykonywaniem kolejnych wywołań metod rozszerzenia.
Platforma encji linq query Include () wiele elementów potomnych