Получение данных просмотров с использованием Entity Framework происходит очень медленно - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над приложением ASP.NET MVC 4, в котором я пытаюсь создать панель мониторинга, которая читает из двух представлений базы данных;одно представление перечисляет здания с количеством и целями, а другое перечисляет этажи этих зданий с количеством и целями.Я пытаюсь объединить их на приборной панели, поэтому я создал модель данных с именем DashboardView, которая содержит здания с этажами в свойстве Children.

Локально работает достаточно хорошо, но при развертывании на рабочем сервере IIS он работает невероятно медленно, и я не уверен, что это связано с неэффективностью доступа к данным:

using (var db = new MyDBContext())
{
    var views = (from building in db.BuildingViews.OrderBy(x => x.BuildingName) select new { building })
                .AsEnumerable()
                .Select(bldgView => new DashboardView
                {
                    ViewType = "Building",
                    ViewLabel = bldgView.building.BuildingName,
                    CurrentCount = bldgView.building.Count,
                    GoalCount = bldgView.building.Goal,
                    Children = (from floors in db.FloorViews.Where(v => v.BuildingId == bldgView.Building.BuildingId) select new { floor })
                                .AsEnumerable()
                                .Select(floorView => new DashboardView
                                {
                                    ViewType = "Floor",
                                    ViewLabel = floorView.floor.FloorName
                                    CurrentCount = floorView.floor.Count,
                                    GoalCount = floorView.floor.Goal
                                }).ToList()
                }).ToList();

    double totalBldgCount = db.BuildingViews.Select(x => x.Count).Sum();
    double totalGoalCount = db.BuildingViews.Select(x => x.Goal).Sum();
}

Есть ли лучший способ создать пакет данных, которого я пытаюсь достичь, или проблема, возможно, связана с одновременным попаданием нескольких пользователей в базу данных?

:: EDIT ::

Теперь я понимаю, что использование .AsEnumerable() может быть причиной плохой производительности;однако я изо всех сил пытаюсь понять, как я могу правильно построить мои DashboardView с дочерними DashboardView объектами без него, поскольку это не работает:

var query = (from buildings in db.BuildingViews
            join floors in db.FloorViews on buildings.BuildingId equals floors.BuildingId
            select new DashboardSprinklerView
            {
                ViewType = "Building",
                ViewLabel = building.BuildingName,
                CurrentCount = building.Count,
                GoalCount = building.Goal,
                Children = (floor from floors select new DashboardSprinklerView
                {
                    ....
                }).ToList()
            }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...