J'essaie d'écrire une méthode de référentiel pour Entity Framework Core 2.0 qui peut gérer renvoyer des collections enfant de propriétés en utilisant .ThenInclude, mais j'ai des problèmes avec la seconde expression. Voici une méthode de travail pour .Include, qui retournera les propriétés enfants (vous fournissez une liste de lambdas) de votre entité.Comment écrire la méthode Repository pour .ThenInclude dans EF Core 2
public T GetSingle(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query.Where(predicate).FirstOrDefault();
}
Maintenant, voici ma tentative d'écrire une méthode qui prendra un tuple de deux expressions et nourrir ceux qui en .include (a => a.someChild) .ThenInclude (b => b.aChildOfSomeChild) chaîne . Ce n'est pas une solution parfaite car elle ne gère qu'un enfant d'un enfant, mais c'est un début.
public T GetSingle(Expression<Func<T, bool>> predicate, params Tuple<Expression<Func<T, object>>, Expression<Func<T, object>>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty.Item1).ThenInclude(includeProperty.Item2);
}
return query.Where(predicate).FirstOrDefault();
}
IntelliSense renvoie une erreur « Le type ne peut pas être déduit de l'utilisation, essayez de spécifier explicitement le type ». J'ai le sentiment que c'est parce que l'expression dans Item2 doit être classée comme liée à Item1, parce qu'elle a besoin de connaître la relation de l'enfant qu'elle a.
Des idées ou de meilleures techniques pour écrire une méthode comme celle-ci?
Cela a été demandé à plusieurs reprises depuis qu'il était de facto une norme de spécification souhaité comprend des méthodes référentiel à l'aide EF6. Il serait intéressant d'entendre un membre de l'équipe EFC quelle était la raison derrière la décision de changer le motif en 'Include' /' ThenInclude' qui ne peut apparemment pas être représenté de cette façon, et plus important encore, quel est le remplacement EFC. –