Entity Framework - Есть ли способ автоматически загружать дочерние объекты без Include ()?

Есть ли способ украсить ваши классы POCO, чтобы автоматически загружать дочерние объекты без необходимости использоватьInclude() каждый раз, когда вы загружаете их?

Допустим, у меня есть автомобиль класса Class со сложными типами свойств для колес, дверей, двигателя, бампера, окон, выхлопа и т. Д. И в моем приложении мне нужно загрузить свой автомобиль из моего DbContext в 20 разных местах с разными запросами и т. Д. Я дон»Я не хочу указывать, что я хочу включать все свойства каждый раз, когда я хочу загрузить свой автомобиль.

я хочу сказать

List 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;
}

Могу ли я как-то украсить свой класс POCO или в моемOnModelCreating() или установить конфигурацию в EF, которая скажет ему просто загружать все части моего автомобиля, когда я загружаю свой автомобиль? Я хочу сделать это с нетерпением, поэтому я понимаю, что виртуальные свойства навигации недоступны. Я знаю, что NHibernate поддерживает аналогичную функциональность.

Просто интересно, если яЯ что-то упустил. Заранее спасибо!

Ура,

Натан

Мне нравится решение ниже, номне интересно, могу ли я вкладывать вызовы в методы расширения. Например, скажем, у меня похожая ситуация с движком, где в нем много деталей, которые мне не нужныне хочу включать везде. Могу ли я сделать что-то подобное? (Я'я еще не нашел способ, чтобы это работало). Таким образом, если позже я обнаружу, что Engine нужны FuelInjectors, я могу добавить его только в BuildEngine и не должен добавлять его также в BuildCar.Также, если я могу вкладывать вызовы, как я могу вкладывать вызов в коллекцию? Хотите вызвать BuildWheel () для каждого из моих колес из моего BuildCar ()?

public static IQueryable BuildCar(this IQueryable 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 BuildEngine(this IQueryable query) {
     return query.Include(x => x.Pistons)
                 .Include(x => x.Cylendars);
}

//Or to handle a collection e.g.
 public static IQueryable BuildWheel(this IQueryable query) {
     return query.Include(x => x.Rim)
                 .Include(x => x.Tire);
}

Вот еще одна очень похожая тема на тот случай, если она пригодится кому-либо еще в этой ситуации, но она все еще неt обрабатывает возможность делать косвенные вызовы к методам расширения.

Платформа сущностей linq query Include () нескольких дочерних сущностей

Ответы на вопрос(2)

Ваш ответ на вопрос