Как стремиться загрузить всю базу данных с EF - PullRequest
2 голосов
/ 31 января 2011

Моя база данных состоит из 5 таблиц с ~ 10000 строк вместе.Требуется ~ 1 МБ в SQL Server CE, который находится в общей папке.Сама база данных является иерархической Страна-Регион-Город-Улица-Строительство.Я использую Entity Framework 4.

Поскольку база данных небольшая, пользователи могут просматривать и редактировать все 2000 городов в WPF ListView.Но с каждым подходом, который я пробовал до сих пор, GUI работает медленно (из-за большого количества обращений к базе данных с фиктивными данными GUI работает очень быстро).Как я могу загрузить всю базу данных в память с одним или несколькими обходами базы данных?

Я пробовал несколько Include(), но заметил большое снижение производительности , как описано здесь

Должен ли я написать свой ORM-light?Я мог бы также использовать простые CSV-файлы ascii вместо базы данных, но это, очевидно, исключало бы параллелизм.

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Честно говоря, я сам сделал что-то подобное, и ответом для меня было скопировать всю базу данных локально и поработать над ней.

Если вы хотите не только читать, но и писать, я бы определенно рекомендовал отказаться от CE и установить одну из экспресс-версий Sql Server. Они предназначены для такой ситуации; CE не *.

* SP1 лучше для одновременного доступа, но по сети никогда не будет работать для больших наборов данных.

0 голосов
/ 08 февраля 2011

Я повторно задал этот вопрос на форуме Microsoft , и они любезно дали мне несколько советов:

В основном мой вопрос можно сформулировать следующим образом:

  • чтение только один раз из базы данных при запуске приложения
  • делать все последующие запросы из локальных данных, а не из базы данных (для производительности)
  • запись в контекст и базу данных каждый раз, когда объект добавляется или удаляется.

Для простого EF это невозможно, поскольку каждый запрос отправляется в базу данных. Это означает, что я должен прочитать данные fast при запуске, а затем cache it.

Детали реализации:

Лучше всего использовать ESQL для быстрого импорта данных и последующего кэширования, например, с использованием сущностей, не связанных с контекстом . Судя по моим первым экспериментам, все работает хорошо.

...