Нужно завершать транзакцию, если ничего не изменял?

Нужно завершать транзакцию, если ничего не изменял?

await using var transaction = await context.Database.BeginTransactionAsync();

var items = await context.Items.OrderBy(i => i.Id).Take(100).ToListAsync();

if (items.Count == 0)
{
    await transaction.CommitAsync();
    return false;
}

...

Если просто покину метод, не навредит ? Или нужно использовать await transaction.CommitAsync(); ?

Задача, получить до 100 итем в рамках транзакции, изменить их, сохранить в другое место, те что получал, удалить из источника.

Если итемов 0, то ничего и не даелать.


Ответы (1 шт):

Автор решения: CrazyElf

Транзакции нужно использовать, когда вас не удовлетворяет стандартное поведение контекста. Вот стандартное поведение:

By default, if the database provider supports transactions, all changes in a single call to SaveChanges are applied in a transaction. If any of the changes fail, then the transaction is rolled back and none of the changes are applied to the database. This means that SaveChanges is guaranteed to either completely succeed, or leave the database unmodified if an error occurs.

For most applications, this default behavior is sufficient. You should only manually control transactions if your application requirements deem it necessary.

Делайте в конце await SaveChangesAsync(); и либо всё выполнится успешно и закоммитится само, либо, если будет какая-то ошибка, то автоматом выполнится роллбэк.

→ Ссылка