Использование BulkUpdateAsync или UpdateRange

До сих пор я использовал асинхронные методы везде, где это было возможно, когда предметом был dbContext. Но для обновления сущностей я не знаю асинхронного метода и использовал UpdateRange (для списка сущностей).

Теперь я нашел BulkUpdateAsync(entities) и не вижу большой разницы между этими двумя методами, этот принимает список IEnumerable, а UpdateRange принимает IEnumerable.

Поскольку при использовании await context.SaveChangesAsync после каждой используемой версии необходимо использовать BulkUpdateAsync?

Речь идет о .Net Core 3 и EF Core 3.


person AlleXyS    schedule 29.05.2020    source источник


Ответы (1)


Только методы, которые действительно взаимодействуют с базой данных, должны быть асинхронными.

UpdateRange просто говорит EF начать отслеживать сущности; это делается полностью синхронно, в памяти и не фиксируется в базе данных.

Как только вы вызываете await context.SaveChangesAsync, обновления фиксируются в базе данных асинхронно.

person Johnathan Barclay    schedule 29.05.2020
comment
Спасибо за Ваш ответ. Итак, если UpdateRange распространяется только в памяти и нуждается в SaveChanges, BulkUpdateAsync будет автоматически сохранять данные в БД без необходимости использовать SaveChanges ниже? Потому что, если я запускаю и BulkUpdateAsync, и SaveChangesAsync, я думаю, что это будет работать синхронно, потому что SaveChangesAsync нужно ждать массовых обновлений раньше. - person AlleXyS; 31.05.2020
comment
@AlleXyS Я не знаком с этим методом, похоже, что он находится в пакете, отличном от стандартного EF, но тот факт, что он асинхронный, предполагает, что он действительно распространяет обновления в базе данных, что делает SaveChangesAsync ненужным. - person Johnathan Barclay; 01.06.2020