LINQ MVC 3 и двойной запрос в профилировщике - PullRequest
0 голосов
/ 13 октября 2011

Я установил Linq To Sql Profiler и заметил, что у меня выполняется двойной запрос (или я ошибаюсь).Итак:

    int categoriesCount = _dataManager.PeopleTalesCategories.GetPeopleTalesCategoriesCount();

Здесь у меня первый запрос:

SELECT COUNT(*) AS [value]
FROM   [dbo].[PeopleTalesCategories] AS [t0]

Затем:

    IEnumerable<PeopleTalesCategory> categories = _dataManager.PeopleTalesCategories.GetAllCategories((int)ViewData["CurrentPage"] * CategoriesOnPage, CategoriesOnPage);
    ViewBag.Categories = categories;
    return View();

Здесь у меня второй запрос:

SELECT ...
FROM   (SELECT ROW_NUMBER() OVER (ORDER BY [t0].[PositionInMenu], [t0].[NameAn]) AS [ROW_NUMBER],
               ...
        FROM   [dbo].[PeopleTalesCategories] AS [t0]) AS [t1]
WHERE  [t1].[ROW_NUMBER] BETWEEN 0 /* @p0 */ + 1 AND 0 /* @p0 */ + 15 /* @p1 */
ORDER  BY [t1].[ROW_NUMBER]

И самое интересное , когда я начинаю отображать свои категории в разметке HTML здесь:

@foreach (var c in ViewBag.Categories)
{
    <h3><a href="/narodnie-skazki/@c.RouteNameAn">@c.NameAn</a> <span>(@c.tCountInCategory)</span></h3>
    <p>@c.Description</p>
}

я получаю третий запрос, как второй.

ИтакКто-нибудь знает, почему у меня есть 3 запроса в Linq To Sql Profiler?Это нормально?

Большое спасибо.

Ссылка на профилировщик: http://l2sprof.com/

1 Ответ

1 голос
/ 13 октября 2011

Я предполагаю, что GetAllCategories возвращает IQueryable, который перечисляется дважды, хотя я не уверен, почему это произошло бы здесь. В любом случае, это может помочь, если вы используете .ToList () при возврате его в GetAllCategories или при назначении его в viewbag:

ViewBag.Categories = categories.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...