У меня только что был огромный * момент блондинки **, но он подчеркивает раздражение, которое я испытываю с Entity Framework. Я отключил отложенную загрузку, поэтому заставляю себя на самом деле думать о том, какие данные мне нужны, чтобы поддерживать приложение как можно быстрее.
Итак, чтобы вернуть данные в запросе, мне нужно использовать метод Include
:
var query = from item in context.Customers
.Include(x=> x.Orders)
select item
Это нормально, пока я не хочу выбрать элемент немного глубже в иерархии. То есть:
Customer 1-* Orders *-1 Factory 1-1 Factory Type
Насколько я знаю, единственный способ вернуть все эти данные с нетерпением - это сделать следующее:
var query = from item in context.Customers
.Include("Orders.Factory.FactoryType")
select item
С учетом вышесказанного я не могу использовать System.Data.Entity
лямбды в соответствии с моим первым примером. Кто-нибудь знает, если я упускаю что-то очевидное здесь, или я застрял с использованием строковых объявлений для моих свойств навигации по коллекциям?
Если бы у меня не было коллекций, я мог бы просто написать:
.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother
Но из-за коллекции Orders
, насколько я могу судить, невозможно перейти к дочернему свойству (FirstOrDefault
, SingleOrDefault
и т. Д. Не работают).
** это всего лишь поворот фразы, мне очень нравятся блондинки *