namespace TransactionsExamples { class TransactionsExample { static void StartOwnTransactionWithinContext() { using (var context = new BloggingContext()) { using (var dbContextTransaction = context.Database.BeginTransaction()) { try { context.Database.ExecuteSqlCommand( @"UPDATE Blogs SET Rating = 5" + " WHERE Name LIKE '%Entity Framework%'" ); var query = context.Posts.Where(p => p.Blog.Rating >= 5); foreach (var post in query) { post.Title += "[Cool Blog]"; } context.SaveChanges(); dbContextTransaction.Commit(); } catch (Exception) { dbContextTransaction.Rollback(); } } } } } }
namespace TransactionsExamples { class TransactionsExample { static void UsingExternalTransaction() { using (var conn = new SqlConnection("...")) { conn.Open(); using (var sqlTxn = conn.BeginTransaction(System.Data.IsolationLevel.Snapshot)) { try { var sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.Transaction = sqlTxn; sqlCommand.CommandText = @"UPDATE Blogs SET Rating = 5" + " WHERE Name LIKE '%Entity Framework%'"; sqlCommand.ExecuteNonQuery(); using (var context = new BloggingContext(conn, contextOwnsConnection: false)) { context.Database.UseTransaction(sqlTxn); var query = context.Posts.Where(p => p.Blog.Rating >= 5); foreach (var post in query) { post.Title += "[Cool Blog]"; } context.SaveChanges(); } sqlTxn.Commit(); } catch (Exception) { sqlTxn.Rollback(); } } } } } }
namespace TransactionsExamples { class TransactionsExample { static void UsingTransactionScope() { using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (var conn = new SqlConnection("...")) { conn.Open(); var sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = @"UPDATE Blogs SET Rating = 5" + " WHERE Name LIKE '%Entity Framework%'"; sqlCommand.ExecuteNonQuery(); using (var context = new BloggingContext(conn, contextOwnsConnection: false)) { var query = context.Posts.Where(p => p.Blog.Rating > 5); foreach (var post in query) { post.Title += "[Cool Blog]"; } context.SaveChanges(); } } scope.Complete(); } } } }