Загрузка данных в Entity Framework 6

105
17 мая 2021, 06:00

Проблема в следующем: Имеются в БД таблицы со связью некоторых таблиц многие ко многим (Отображу в виде классов EntityFramework):

class Device 
{ 
    .... 
     public string DeviceProperty { get; set; }
     public virtual ICollection<DeviceList> DeviceElementList { get; set; }
    ....
}
class Element 
{ 
    ...
     public string ElementProperty { get; set; }
     public virtual ICollection<DeviceElement> DeviceElementList { get; set; }
    ...
}
class DeviceElement 
{ 
   ...
   public virtual Device Device { get; set; }
   public virtual Element Element { get; set; }
   ...
}

Загружаем данные в таблицу DataGrid, используя ленивую загрузку:

using (DBContext context = new DBContext())
{
    var data = from d in context.DeviceElements
                      where ...
                      select d;
    dataGrid.ItemsSource = data.ToList();
    dataGrid.Items.Refresh();
}

В результате, в таблицу загружаются поля через биндинги типа

... Binding={Binding Path = Device.DeviceProperty} ...  и 
... Binding={Binding Path = Element.ElementProperty} ... и т.д.

Всё вроде хорошо, но когда строк больше 5 тысяч(в моем случае) и каждая таблица имеет минимум 10 полей, включая поля не с базовыми типами данных, то, к примеру, вывод нескольких отсортированных строк с данными может длиться около 7-10 секунд.

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

using (DBContext context = new DBContext())
{
    context.DeviceElements.Load();
    dataGrid.ItemsSource = context.DeviceElements.Local.ToBindingList();
    dataGrid.Items.Refresh();
}

Без разницы вообще!.. Как можно сделать загрузку данных в таблицу более оптимизированной что ли, чтобы не ждать такое огромное количество времени сортировку. Возможно, чтобы данные, загружались куда-то в кэш, а потом при повторной загрузке просто дописывались отсутствующие данные, либо удалялись уже отсутствующие в основной БД???.

Дополню:
При загрузке всех данных таблицы, без сортировки, загрузка проходит гораздо быстрее (секунды 2), против отсортированных данных (~7 секунд), т.е. если запрос вернёт только несколько строк - на это уйдет тех же 7 секунд

READ ALSO
Как отобразить коллекцию как значение в DataGrid?

Как отобразить коллекцию как значение в DataGrid?

Есть DataGrid, ItemsSource которого является List<Author>В классе Author есть публичное свойство List<Book>

107
Сортировка List&lt;GameObject&gt;

Сортировка List<GameObject>

Как можно отсортировать List по алфавиту используя gameObjectname?

352
Как остановить цикл? C#

Как остановить цикл? C#

Есть кнопка которая при нажатии запускает действие, и при повторном нажатии останавливает

87
Заполнить массив значениями из базы данных и получить их кол-во

Заполнить массив значениями из базы данных и получить их кол-во

я получаю из базы данных строку следующего типа 1,2,3,4,5 Мне нужно заполнить массив int этими значениями и посчитать их кол-во (в данном случае...

81