Ядро entity framework - включение нескольких уровней свойства для коллекции

Я хочу знать, как включить несколько уровней свойства для коллекции в Entity Framework Core.

Пример моей ситуации:

public class A
{
    public ICollection<B> listB ...
}

public class B
{
    public C c ...
}

Ответы, представленные в Entity Framework - включает несколько уровней свойств для EF Core, не охватывают случай, когда вложенные свойства являются коллекциями, когда я пытаюсь:

var wtv = Context.AItems.Include(a => a.listB).ThenInclude(b => b. )

У меня есть доступ только к свойствам самой коллекции ICollection (listB), а не к свойствам содержащихся в ней объектов B, так что я могу включить в нее содержащийся в ней объект C.

Мне удалось сделать это вручную (будучи намного более подробным, чем я бы предпочел), загружая объекты B отдельно и включая в них то, что я хочу, и только затем добавляю их в список B. Однако в моей реальной ситуации свойства, которые я хочу включить в уровни ниже, также предназначены для коллекций, поэтому это становится все менее и менее практичным. Есть ли более простой и элегантный способ сделать это?

2
0
3 990
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть две перегрузки ThenInclude, одна для случая, когда предыдущее свойство навигации является одним объектом, а другая для коллекций:

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;

Вы должны просто использовать это так:

Context.AItems.Include(a => a.listB).ThenInclude(b => b.c)

От Документы Microsoft:

Current versions of Visual Studio offer incorrect code completion options and can cause correct expressions to be flagged with syntax errors when using the ThenInclude method after a collection navigation property. This is a symptom of an IntelliSense bug tracked at https://github.com/dotnet/roslyn/issues/8237. It is safe to ignore these spurious syntax errors as long as the code is correct and can be compiled successfully.

@DiegoTorres, спасибо, что указали на это, я добавил это в свой ответ.

Alisson 26.10.2018 06:20

Другие вопросы по теме