Próbuję napisać metodę repozytorium dla Entity Framework Core 2.0, która może obsłużyć zwracające zbiory potomne właściwości przy użyciu .ThenInclude, ale mam problem z drugim wyrażenie. Oto działająca metoda .Include, która zwróci właściwości podrzędne (dostarczasz listę lambd) twojego obiektu.Jak napisać metodę repozytorium dla .ThenInclude w 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();
}
Teraz tutaj jest mój próba pisania metodę, która odbędzie krotką dwóch wyrażeń i nakarmić tych, w .Include (a => a.someChild) .ThenInclude (b => b.aChildOfSomeChild) łańcuch . To nie jest idealne rozwiązanie, ponieważ obsługuje tylko jedno dziecko dziecka, ale jest to początek.
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 zwraca komunikat o błędzie "Typ nie może zostać wywnioskowany z użycia, spróbuj podać ten typ jawnie". Mam przeczucie, że to dlatego, że wyrażenie w Item2 musi być sklasyfikowane jako w jakiś sposób powiązane z Item1, ponieważ musi wiedzieć o jego relacji podrzędnej.
Jakieś pomysły lub lepsze techniki pisania takiej metody?
ten został poproszony kilkakrotnie ponieważ de facto standardem określania pożądanego obejmuje sposoby repozytorium przy EF6. Byłoby interesujące usłyszeć jakiegoś członka zespołu EFC, co było przyczyną decyzji o zmianie wzorca na 'Include' /' ThenInclude', który widocznie nie może być reprezentowany w ten sposób, a co ważniejsze, co to jest zastąpienie EFC. –