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!
Je ne vois pas où vous utilisez les GetMultipleChoiceItems? Vos derniers extraits de code accèdent simplement au contenu sans utiliser Inclure. –
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. –