0

J'ai une entité Content abstraite dans mon modèle EF4 avec une sous-classe concrète, MultipleChoiceItem. Il existe une table associée dans le cas de MultipleChoiceItem accessible par une propriété Navigation sur l'entité MultipleChoiceItem appelée Options. Je voudrais charger avec impatience le résultat des Options car si vous obtenez un MultipleChoiceItem, vous voulez toujours les Options. Cependant, je n'arrive pas à faire fonctionner ça. Voici ce que je l'ai fait bascially:Impossible de charger EF4 d'une entité sous-classée au travail

  • Le MultipleChoiceItem est une sous-classe, donc il n'a pas obtenu les métadonnées créées par défaut. Donc, je créé une classe de métadonnées pour ce qui ressemble un peu comme ceci:

    [MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] 
    public partial class MultipleChoiceItem 
    { 
        internal sealed class MultipleChoiceItemMetadata 
        { 
         ... other stuff ... 
         [Include] 
         public EntityCollection<McOption> Options { get; set; } 
         ... other stuff ... 
        } 
    
  • J'ai ensuite créé une nouvelle requête dans le ContentService qui ressemble à ceci:

    public IQueryable<Content> GetMultipleChoiceItems() 
    { 
        return this.ObjectContext.Contents.OfType<MultipleChoiceItem>() 
         .Include("Options"); 
    } 
    

Dans un test unitaire, j'appelle que comme ceci:

context = new ContentContext(); 
    var loadOperation = context.Load(context.GetMultipleChoiceItemsQuery()); 
    loadOperation.Completed += new EventHandler(CompletedHandler); 

Une fois que je reçois dans le CompletedHandler, le code suivant ne pas s eem pour que la propriété Options soit chargée - en fait, Options.Count == 0 alors qu'elle devrait être 4 (vérifiée en vérifiant le magasin de données sous-jacent).

MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem; 

Quelqu'un peut-il me dire ce que je fais mal? J'ai essayé de suivre les modèles que j'ai vu posté et il me manque apparemment quelque chose ...

Merci!

+0

Je ne vois pas où vous utilisez les GetMultipleChoiceItems? Vos derniers extraits de code accèdent simplement au contenu sans utiliser Inclure. –

+0

Je l'utilise dans le context.Load dans l'extrait avant celui-là. Le dernier extrait est dans le gestionnaire d'événements qui se produit à l'heure terminée pour l'opération loadOperation. –

Répondre

0

Mon attribut de type de métadonnées pour les métadonnées que je devais faire à la main (puisque RIA ne fait pas de métadonnées pour les sous-classes par défaut pour une raison quelconque) avait le mauvais type. On pouvait y lire inadvertantly:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] 

Et il aurait fallu lire:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.MultipleChoiceMetadata))] 

Le fait qu'il n'y a pas de métadonnées générées pour les sous-classes est assez ennuyeux.

De toute façon, poster ici au cas où quelqu'un d'autre a ce problème!

Questions connexes