У меня есть абстрактный объект контента в моей модели EF4 с конкретным подклассом MultipleChoiceItem. Существует связанная таблица в случае MultipleChoiceItem, доступ к которому осуществляется с помощью свойства Navigation в объекте MultipleChoiceItem, называемом Options. Я бы хотел загрузить результат «Параметры», потому что если вы получаете MultipleChoiceItem, вам всегда нужны параметры. Однако я не могу заставить это работать. Вот что я сделал Bascially:Не удается получить EF4 Яркая загрузка подклассов для работы
The MultipleChoiceItem является подклассом, поэтому он не получил метаданные, созданные по умолчанию. Таким образом, я создал класс метаданных для него, которая выглядит вроде как это:
[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] public partial class MultipleChoiceItem { internal sealed class MultipleChoiceItemMetadata { ... other stuff ... [Include] public EntityCollection<McOption> Options { get; set; } ... other stuff ... }
Затем я создал новый запрос в ContentService который выглядит следующим образом:
public IQueryable<Content> GetMultipleChoiceItems() { return this.ObjectContext.Contents.OfType<MultipleChoiceItem>() .Include("Options"); }
В модульное тестирование, я звоню, что как это:
context = new ContentContext();
var loadOperation = context.Load(context.GetMultipleChoiceItemsQuery());
loadOperation.Completed += new EventHandler(CompletedHandler);
После того, как я вхожу в CompletedHandler, следующий код не S чтобы иметь свойство Options загружено - на самом деле, Options.Count == 0, когда ему должно быть 4 (проверено путем проверки хранилища данных).
MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem;
Может ли кто-нибудь сказать мне, что я делаю неправильно? Я пытался следить за моделями, которые я видел, и я, кажется, ничего не вижу ...
Спасибо!
Я не вижу, где вы используете GetMultipleChoiceItems? Ваши последние фрагменты кода просто получают доступ к содержимому без использования Include. –
Я использую его в контексте. Загружайте фрагмент перед этим. Последний фрагмент находится в обработчике событий, который происходит в завершенное время для загрузки. –