В .net core 2.2 у меня есть такая модель:
public class A
{
public ICollection<B> B { get; set; }
}
public class B
{
public ICollection<C> C { get; set; }
public ICollection<D> D { get; set; }
}
public class C
{
}
public class D
{
}
И запрос примерно такой:
var query = from record in Set<A>()
where record.Id == Id
select new AProjection
{
BProjection =( from bRecord in Set<B>()
where bRecord.Id = record.BId
select new BProjection
{
CProjection = bRecord.C.Select( b => new CProjection {/* data here */ }),
DProjection = bRecord.C.Select( b => new DProjection {/* data here */ })
})
}
Я хочу вернуть данные в проекцию, но для каждого объекта типа B выполняется запрос для получения объектов типа C и еще один для получения объектов типа D. Как я могу избежать такого поведения?
Это типичная проблема запросов N + 1, рассматриваемая в этом вопросе: