В приведенном выше фрагменте не выполняется метод SaveChangesAsync()
или SaveChanges()
(я так понимаю, вы выполняете его позже).
Это означает, что весь процесс происходит локально в вашем контексте / памяти только .
Транзакции
Тот факт, что методы BatchDelete () и BatchInsert () заключены в транзакцию, не имеет значение, потому что эти операции происходят в вашем контексте, который, вероятно, будет воссоздан в вашем следующем запросе (учитывая, что его время жизни ограничено).
Транзакция имела бы больше смысла, если бы ваш код был таким
using (var transaction = this.RepositoryContext.Database.BeginTransaction())
{
int totalDeleted = this.BatchDelete(deleteEntityList);
this.SaveChanges();
int totalInserted = this.BatchInsert(insertEntityList);
this.SaveChanges();
transaction.Commit();
List<int> result = new List<int>();
result.Add(totalDeleted);
result.Add(totalInserted);
return result;
}
Итак, если по какой-либо причине ваша вторая операция с базой данных завершится неудачно, первая тоже откатится. (Я знаю, что этот пример не будет иметь смысла в вашем случае, вы можете просто выполнить метод SaveChanges()
в конце вашего метода TransactionalDeleteAndInsert()
, и вы можете избежать нежелательных данных, сохраненных в вашей базе данных, в случае сбоя вставки)
Медленные операции с базами данных
Это может быть вызвано многими причинами. Это может быть медленный сервер sql, очень большие таблицы или длинные списки добавления / удаления. Это причина того, что когда вы обновляете sh, это занимает много времени, потому что, обновляя, вы снова запрашиваете свою базу данных, когда она уже находится под большим давлением.