Voglio sapere come posso includere più livelli di una proprietà per una raccolta in Entity Framework Core.
Un esempio della mia situazione:
public class A
{
public ICollection<B> listB ...
}
public class B
{
public C c ...
}
Le risposte fornite in Entity Framework - Includi più livelli di proprietà per EF Core non coprono il caso in cui le proprietà nidificate sono raccolte, quando provo:
var wtv = Context.AItems.Include(a => a.listB).ThenInclude(b => b. )
Ho solo accesso alle proprietà di ICollection stesso (listB) e non alle proprietà degli oggetti B in esso contenuti, in modo da poter includere l'oggetto C in esso contenuto.
Sono riuscito a farlo manualmente (essendo molto più dettagliato di quanto preferirei), caricando gli oggetti B separatamente e includendo ciò che voglio in esso, e solo dopo li aggiungo alla lista AB. Tuttavia, nella mia situazione di vita reale le proprietà che voglio includere nei livelli sottostanti sono anche per le raccolte, quindi questo diventa sempre meno pratico. C'è un modo più semplice ed elegante per farlo?
Esistono due overload di ThenInclude
, uno per il caso in cui la precedente proprietà di navigazione è una singola entità e un'altra per le raccolte:
public static IIncludableQueryable<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>([NotNullAttribute] this IIncludableQueryable<TEntity, TPreviousProperty> source, [NotNullAttribute] Expression<Func<TPreviousProperty, TProperty>> navigationPropertyPath) where TEntity : class;
public static IIncludableQueryable<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>([NotNullAttribute] this IIncludableQueryable<TEntity, IEnumerable<TPreviousProperty>> source, [NotNullAttribute] Expression<Func<TPreviousProperty, TProperty>> navigationPropertyPath) where TEntity : class;
Dovresti essere in grado di usarlo in questo modo:
Context.AItems.Include(a => a.listB).ThenInclude(b => b.c)
Da Microsoft Docs :
Le versioni correnti di Visual Studio offrono opzioni di completamento del codice errate e possono causare la segnalazione di espressioni corrette con errori di sintassi quando si utilizza il metodo ThenInclude dopo una proprietà di navigazione della raccolta. Questo è un sintomo di un bug IntelliSense tracciato su https://github.com/dotnet/roslyn/issues/8237 . È possibile ignorare questi errori di sintassi spuri purché il codice sia corretto e possa essere compilato correttamente.