#c# #entity-framework #asp.net-core #linq-to-sql #entity-framework-core
#c# #entity-framework #asp.net-ядро #linq-to-sql #entity-framework-core
Вопрос:
У меня очень простой запрос, который возвращает Order
, но когда я выполняю один и тот же запрос со многими Includes
, а ThenInclude
затем запрос возвращает 0 результатов вместо 1
var a = _context
.Orders
.FirstOrDefault(x => x.Id == OrderId);
var b = _context
.Orders
.OrdersFullInclude()
.FirstOrDefault(x => x.Id == OrderId);
Где OrdersFullInclude()
=
public static IQueryable<Order> OrdersFullInclude(this IQueryable<Order> input)
{
return input
.Include(x => x.StatusesHistory)
.Include(x => x.File)
.Include(x => x.SomeData)
.ThenInclude(x => x.SomeDeeperLevel)
.Include(x => x.Company)
.Include(x => x.Customer)
.Include(x => x.Insurance)
.ThenInclude(x => x.InsuranceSomething);
}
Почему?
Комментарии:
1.В запросе генерируется свойство навигации по ссылкам
JOIN
. ЭтоJOIN
либоINNER
(для требуемого отношения), либоLEFT OUTER
(для необязательного отношения). Поэтому проверьте сгенерированный SQL — любойINNER JOIN
может отфильтровать результат. Скорее всего, вы сопоставили некоторые отношения по мере необходимости, в то время как в базе данных это не так.2. @IvanStoev О, я думал, что это будет просто null . Спасибо
Ответ №1:
Вызывая Include
, вы объединяете свой результат с некоторыми другими таблицами, и, по-видимому, не все объединенные таблицы имеют запись, связанную с записью в первом наборе результатов, поэтому она не возвращает результата.