Я разрабатываю приложение для Windows Mobile 5, в котором часть приложения загружает данные (более 2000) из IEnumerable.
В данный момент я проверяю, существует ли идентификатор в базе данных, и в зависимости от результата я выполняю оператор вставки или обновления (используя метод ExecuteNonQuery в SqlCeCommand).
Пока что он работает просто отлично, но мне интересно, есть ли более быстрый / лучший способ сделать это, который может повысить производительность.
Я смотрел на какую-то групповую вставку,но из того, что я понимаю, это будет работать только для вставок.Есть большая вероятность, что некоторые элементы в моем IEnumerable <> уже будут существовать в базе данных, и в этом случае потребуется обновление.Так что массового копирования / вставки не будет - это правильно?
Любые ответы приветствуются.
Большое спасибо,
ETFairfax.
РЕДАКТИРОВАТЬ: Это код, с которым я закончил.Увеличение производительности удивительно.Я потратил 30 секунд, чтобы сохранить 1000 записей, и это мгновение ока.Не стесняйтесь предлагать дальнейшие улучшения ....
public void MergeData(IEnumerable<T> entities)
{
using (var cmd = GlobalConnection.Instance.Connection.CreateCommand())
{
cmd.CommandType = CommandType.TableDirect;
cmd.IndexName = "PK_" + this.TableName;
cmd.CommandText = this.TableName;
using (SqlCeResultSet sqlCeResultSet = cmd.ExecuteResultSet(ResultSetOptions.Updatable))
{
foreach (var entityToSave in entities)
{
bool recordAlreadyExists = sqlCeResultSet.Seek(DbSeekOptions.FirstEqual, entityToSave.Id);
if (recordAlreadyExists)
{
//Do an Update
sqlCeResultSet.Read();
PopulateForUpdate(sqlCeResultSet, entityToSave);
sqlCeResultSet.Update();
}
else
{
//Do an Insert
SqlCeUpdatableRecord insertRecord = sqlCeResultSet.CreateRecord();
PopulateForInsert(insertRecord, entityToSave);
sqlCeResultSet.Insert(insertRecord);
}
}
}
}
}