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

questionAnswers(2)

yourAnswerToTheQuestion