EF中事务的使用
首先:EF本身自带有事务功能,当SaveChanges()时,触发,提交回滚。下面介绍两种写法:
第一种:
context.Customers.Add(entity1);
context.Customers.Add(entity2);
context.SaveChanges(); // 提交时将抛出异常
此种情况 不会提交到数据库
第二种:
context.Customers.Add(entity1);
context.SaveChanges(); // 顺利执行
context.Customers.Add(entity2);
context.SaveChanges(); // 提交时将抛出异常
此种情况,entity1已提交DB,entity2未提交成功
基于这两种情况,建议使用 TransactionScope
1 using (var transactionScope = new TransactionScope( 2 TransactionScopeOption.RequiresNew)) 3 { 4 Customer entity1 = Mapper.Map<DomainModels.Customer, Customer>(customer1); 5 Customer entity2 = Mapper.Map<DomainModels.Customer, Customer>(customer2); 6 7 using (RetailEntities context = new RetailEntities()) 8 { 9 context.Customers.Add(entity1); 10 context.SaveChanges(); // 顺利提交 11 context.Customers.Add(entity2); 12 context.SaveChanges(); // 提交时将抛出异常 13 14 customer1.Id = entity1.Id; 15 customer2.Id = entity2.Id; 16 } 17 18 transactionScope.Complete(); 19 } 20 } 21 catch (Exception ex) 22 { 23 Console.WriteLine(FlattenException(ex)); 24 }
总结:小知识点需要积累。
参考:
tks:http://www.cnblogs.com/gaochundong/archive/2013/06/09/entityframework_usage_transaction_scope.html
http://www.cnblogs.com/dudu/archive/2011/04/06/entity_framework_transaction.html