Xamarin Android: эффективный способ создания копии некоторых записей таблицы БД SQLite - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть приложение Xamarin (C #) для Android, которое обрабатывает некоторую информацию о клиентах.У меня есть следующий метод, который читает из базы данных SQLite (соединение хранится в глобальной переменной globalVars.Db ), некоторые цитаты для конкретного клиента (с именем, хранящимся в другой глобальной переменной, )globalVars.Customer ).Учитывая число n , которое я передаю этому методу, я просто хочу создать n копий этой информации о клиенте в одну и ту же таблицу БД после замены имени клиента на более общие имена (например, " Клиент по умолчанию 1"," Клиент по умолчанию 2"и т. Д.).Приведенный ниже код работает, как и ожидалось, но, по-видимому, работает относительно медленно, особенно если n равно 3 или более.Есть ли более эффективный способ достижения моей цели?

private void cloneCustomer(int n)
    {
        var tableQuotes = from d in globalVars.Db.Table<dbQuotes>()
                          where d.CustomerName == globalVars.Customer
                          select d;

        for (int i = 1; i <= n; i++)
        {
            foreach (var quote in tableQuotes)
            {
                quote.CustomerName = "Default customer " + i;
                globalVars.Db.Insert(quote);
            }
        }
    }

1 Ответ

0 голосов
/ 16 сентября 2018

Обернуть блок вставки цикла в одну транзакцию

private void cloneCustomer(int n)
    {
        var tableQuotes = from d in globalVars.Db.Table<dbQuotes>()
                          where d.CustomerName == globalVars.Customer
                          select d;

        globalVars.Db.RunInTransaction(() => {

          for (int i = 1; i <= n; i++) {
            foreach (var quote in tableQuotes){              
                quote.CustomerName = "Default customer " + i;
                globalVars.Db.Insert(quote);
             }
           }

       });
}
...