Моя проблема заключается в том, что каждый раз, когда я загружаю это представление, мое приложение отправляет 249 идентичных запросов в базу данных. Первоначально я использовал ленивую загрузку, и количество запросов было двойным.Несколько запросов БД, когда Eager Loading in Entity Framework 6
Номер 249, приведенный выше, представляет количество строк, возвращаемых этим запросом.
Я понимаю, что .Include создает соединение, которое должно устранить это поведение?
Может ли кто-нибудь сказать мне, как устранить это дублирование запросов?
Cheers!
Код ниже является псевдокодом и не предназначен для компиляции.
Контроллер:
var apples = _unitOfWork.Context.Apples
.Include(x=> x.AppleTypes)
.OrderByDescending(x => x.Id)
.Where(x => x.Status == (int)AppleStatusConstants.New
&& x.IsRejected != true && x.AppleManId != null);
return View(apples);
Вид:
@model IEnumerable<Apple>
@Html.DisplayNameFor(model => model.AppleTypes.TypeSeason)
@foreach (var item in Model){
@Html.DisplayFor(modelItem => item.AppleTypes.TypeSeason)
}
трассировки SQL из Glimpse:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Type] AS [Type],
[Extent2].[Id] AS [Id1],
[Extent2].[TypeSeason] AS [TypeSeason],
FROM [dbo].[Apples] AS [Extent1]
LEFT OUTER JOIN [dbo].[AppleTypes] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
WHERE (0 = [Extent1].[Status]) AND (NOT ((1 = [Extent1].[IsRejected]) AND ([Extent1].[IsRejected] IS NOT NULL))) AND ([Extent1].[OrgUnitId] IS NOT NULL)
ORDER BY [Extent1].[Id] DESC
Является .ToList() более дорогостоящая операция? Один из старших программистов здесь поощряет меня не к пользователю .ToList() по возможности –
Нет никакого хорошего ответа. Это просто зависит. Бывают случаи, когда '.ToList() '- правильное решение и время, когда это не так. –