Как мне нужно загружать объект со ссылкой на экземпляр постоянного базового типа (Entity Framework 4) - PullRequest
4 голосов
/ 26 августа 2011

Domain Model

Выше приведена упрощенная версия модели нашего домена. 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...