0

У меня есть абстрактный объект контента в моей модели 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; 

Может ли кто-нибудь сказать мне, что я делаю неправильно? Я пытался следить за моделями, которые я видел, и я, кажется, ничего не вижу ...

Спасибо!

+0

Я не вижу, где вы используете GetMultipleChoiceItems? Ваши последние фрагменты кода просто получают доступ к содержимому без использования Include. –

+0

Я использую его в контексте. Загружайте фрагмент перед этим. Последний фрагмент находится в обработчике событий, который происходит в завершенное время для загрузки. –

ответ

0

Атрибут атрибута метаданных для метаданных, которые мне приходилось делать вручную (поскольку по какой-либо причине RIA не делает метаданные для подклассов по умолчанию) имеет неправильный тип. Он ненароком прочитал:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] 

И следует читать:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.MultipleChoiceMetadata))] 

Тот факт, что не существует метаданных генерируется для подклассов очень раздражает.

Как бы то ни было, размещайте здесь, если у кого-то еще есть эта проблема!

Смежные вопросы