Entity Framework - Héritage avec .Include?

entity-framework

Question

Je pense qu'il y a un post similaire à ce sujet mais pas exactement le même ...

J'ai deux entités dans mon modèle EF - appelons-les personne et développeur, ce dernier héritant du premier.

J'ai également une association sur les développeurs appelée Qualifications. Ceci n'est pas visible sur l'entité Personne.

Si j'écris une requête sur le contexte, comment puis-je inclure automatiquement les qualifications du développeur, par exemple

de l'employé dans le contexte.Employé .Include ("Qualifications") sélectionnez l'employé

ne fonctionne pas ... EF se plaint que la relation n'existe pas (je présume, car elle n'existe pas sur Employee - mais il n'y a pas d'entité Developer dans le contexte, mais Employee).

Réponse populaire

J'ai rencontré ce problème et expérimenté un peu. Voici ce que j'ai trouvé a fonctionné en utilisant LINQ 2 Entity.

Disons que nous avons dans votre exemple Person <- Developer ---- Qualifications.

Si vous souhaitez sélectionner un développeur avec les qualifications incluses, vous le feriez.

var dev = (from d in context.Persons.OfType<Developer>
                            .Include("Qualifications")
          where d.ID == id
          select d).FirstOfDefault();

Supposons maintenant que nous ayons une autre association entre une personne et une adresse. Nous pouvons également inclure une adresse dans l'élément select à l'aide de l'entité LINQ 2.

var dev = (from d in context.Persons
                            .Include("Address")
                            .OfType<Developer>()
                            .Include("Qualifications")
          where d.ID == id
          select d).FirstOfDefault();

Remarquez comment j'ai inclus les éléments dont j'avais besoin avant de convertir le type et également inclus après la conversion. Les deux inclus devraient maintenant travailler ensemble sans aucun problème. J'ai testé ces méthodes et elles fonctionnent toutes les deux. J'espère qu'ils travaillent pour vous, étant donné que vous avez correctement configuré votre héritage.

GL.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow