Roadmap › Entity Framework (EF6 & EF Core) › Module: Saving Data
Lessons in this course (15)

12. Transactions

Intermediate★ Must knowLesson 12 of 15
csharp
await using var tx = await db.Database.BeginTransactionAsync(ct);
try
{
    db.Orders.Add(order);
    await db.SaveChangesAsync(ct);                      // gets order.Id

    await db.Inventory.Where(i => i.ProductId == pid).ExecuteUpdateAsync(s => s.SetProperty(i => i.Qty, i => i.Qty - qty), ct);
    await tx.CommitAsync(ct);
}
catch
{
    await tx.RollbackAsync(ct);
    throw;
}

With EnableRetryOnFailure, user-initiated transactions must run inside an execution strategy: await db.Database.CreateExecutionStrategy().ExecuteAsync(async () => { ... }). Savepoints are created automatically by SaveChanges inside an explicit transaction.