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        }
异常 Code

 

总结:小知识点需要积累。

参考:

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

posted @ 2013-06-12 15:51  365lei  阅读(843)  评论(0编辑  收藏  举报