![Domain Model](https://i.stack.imgur.com/lpClU.png)
Выше приведена упрощенная версия модели нашего домена. NotificationOrder
содержит ссылку на экземпляр подкласса (рассмотрим ReferenceNumberBase
логически абстрактно).
Проблема:
Я хочу, чтобы запрос возвратил все NotificationOrders
, которые удовлетворяют XYZ, и я хочу, чтобы этот запрос охотно загружал все ссылочные экземпляры CustomerCase
(включая все связанные объекты этого графа, кроме Group
, забудьте об этой проблеме момент).
Я пытался найти решение этой проблемы, но все, что я нашел, - это решение проблем, эквивалентных запросу CustomerCase
как корневого объекта напрямую.
Я бы хотел что-то вроде этого:
var query = ObjectContext.CreateObjectSet<NotificationOrder>.Where(e => e.NotificationType == "Foo");
return ((ObjectSet<NotificationOrder>) query).Include("ReferenceNumberBase");
Однако, это не приведет к загрузке Vehicle
экземпляра CustomerCase
или любых других связанных объектов. Как я могу выразить это так, чтобы EF понимал, какую нагрузку я хочу (я бы очень хотел избежать нескольких обращений / порядка уведомлений)?
ПРИМЕЧАНИЕ. Поскольку CustomerCase
является производным типом, я не могу сделать обычный переходный процесс, используя что-то вроде этого:
var query = ObjectContext.CreateObjectSet<NotificationOrder>.Where(e => e.NotificationType == "Foo");
return ((ObjectSet<NotificationOrder>) query).Include("ReferenceNumberBase.Vehicle"); //
, поскольку свойство Vehicle
является членом производного типа CustomerCase
, а не типа ReferenceNumberBas
e, и вместо этого мы получаем ошибки типа:
«EntityType Model.ReferenceNumberBase не объявляет свойство навигации с именем« Автомобиль »."
Также я не могу использовать query.OfType<CustomerCase>...
, поскольку тип запроса NotificationOrder
, а не ReferenceNumberBase (или я могу как-то?).
пс. Мы используем самосопровождающие объекты POCO с EF4 (еще не обновлены до 4.1)
РЕДАКТИРОВАТЬ: Я искал еще немного, и примерно год назад это, похоже, было ограничение метода Include () (по крайней мере, в то время). Это точно, и с тех пор ли это было решено? [источники ниже]
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/a30351ab-5024-49a5-9eb4-798043a2b75d
http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1057763-inheritance-eager-loading?ref=title
https://connect.microsoft.com/VisualStudio/feedback/details/594289/in-entity-framework-there-should-be-a-way-to-eager-load-include-navigation-properties-of-a-derived-class