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.app
You can use the DbContext.Database
API to begin, commit, and rollback transactions. The following example shows two SaveChanges()
operations and a LINQ query being executed in a single transaction.ide
Not all database providers support transactions. Some providers may throw or no-op when transaction APIs are called.spa
using (var context = new BloggingContext()) { using (var transaction = context.Database.BeginTransaction()) { try { context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); context.SaveChanges(); context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" }); context.SaveChanges(); var blogs = context.Blogs .OrderBy(b => b.Url) .ToList(); // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails transaction.Commit(); } catch (Exception) { // TODO: Handle failure } } }