2012-03-15 3 views
3

J'ai un modèle qui ressemble à ceci:Entity Framework 4.3 - polymorphique requête avec Désireuse Chargement

public abstract class Parent 
{ 
    public int Id { get; set; } 
} 

public class Child11 : Parent 
{} 

public class Child2 : Parent 
{ 
    public virtual Dependency Dependency { get; set; } 
} 

public class Dependency 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Child2> Children { get; set; } 
} 

J'essaie de savoir qui d'écrire une requête Linq qui charge tous les parents et les charges avides de dépendance sur tous les Child2. Est-ce seulement possible? J'ai essayé toutes les combinaisons de déclarations Linq que je peux penser et n'ai pas eu de succès.

Répondre

3

Si vous devez charger juste CHILD2 vous pouvez utiliser:

var child2 = context.Parents 
        .OfType<Child2>() 
        .Include(c => c.Dependency) 
        .ToList(); 

Si vous devez également charger tous les autres types dérivés vous très probablement besoin d'utiliser la deuxième requête ou essayer de faire une union. Les requêtes polymorphes dans EF ne fonctionnent pas très bien avec un chargement enthousiaste.

+0

Comment pourrais-je faire une union? J'ai essayé context.Child2s.Include (c => c.Dependency) .Union (context.Child1s) et il m'a donné une erreur disant qu'il n'a pas pu trouver l'association de dépendance sur Parent. –

+0

Vous utiliserez très probablement deux requêtes et résultats de regroupement distincts dans l'application, car l'option Modifier la forme de l'ensemble de résultats ne peut pas être associée à une autre forme. –

Questions connexes