Как обновить-вставить или удалить много данных в базе данных с контактной таблицей? - PullRequest
0 голосов
/ 24 сентября 2019

Я использую с winform в C # и Entity Framework.

В базе данных у меня есть таблица контактов

Между «словом» и «пользователем» в таблице Word много данных (4000+).

У меня есть окно с datagridview, где в каждой строке есть флажок, чтобы пользователь помечал слова, которые он хочет.

И, нажав кнопку сохранения, я хочу обновить всезаписывает, что он изменился в таблице.

listWord = Program.DB.WordUseUser.Where(lw => lw.IdUser == thisIdUser).ToList();

///Clicking on the checkbox I add or remove from ListWord accordingly...

foreach (var item in listWord)
        {
            Program.DB.WordUseUser.Remove(item);
        }
Program.DB.SaveChanges();
foreach (WordUseUser item in listWord)
        {
            Program.DB.WordUseUser.Add(item);
        }
Program.DB.SaveChanges();

Это занимает много времени (конечно ...)

И я ищу более эффективное решение.

Я попытался использовать решение здесь: Самый быстрый способ вставки в Entity Framework

Но речь идет только об обновлении существующих данных

А не об обновлении и добавлениии удаляю вместе

Я бы с удовольствием за помощью !!

1 Ответ

0 голосов
/ 24 сентября 2019

Быстрый ответ - вы должны сделать это внутри явной транзакции.Это не только безопасно, но и намного быстрее.

Итак, начните транзакцию - делайте обновления / вставки и фиксируйте транзакцию.

Каждый запрос создает свою собственную неявную транзакцию.Если нет уже существующей транзакции.Так что думайте об этом как: без создания базы данных транзакций необходимо выполнить 12000 операций (для каждого запроса: создать транзакцию, выполнить запрос, зафиксировать транзакцию), а когда вы создаете явную транзакцию, это просто 4002 операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...