首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用事务在EF 6中保存列表?

如何使用事务在EF 6中保存列表?
EN

Stack Overflow用户
提问于 2014-06-29 17:18:56
回答 2查看 299关注 0票数 1

我正试图找到最合适的方法来保存订单列表和使用EF6的付款列表。我想知道下面的示例代码是否正确,例如,foreach循环是否在正确的位置?

代码语言:javascript
复制
using (ContextDB db = new ContextDB())
{
   foreach (Order item in orders)
      {
          using (var dbContextTransaction = db.Database.BeginTransaction())    
          {
              try
              {               

                  // some logic here to retrieve related payment, etc...
                   ...

                   db.Orders.Add(item);
                   db.Payments.Add(pmntRcvd) 
                   db.SaveChanges();   

                   dbContextTransaction.Commit();
               }
               catch
               {
                   // Code to log the exception
                   ...                        
                }  
           }   
      }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-29 17:25:50

  1. 您正在将项目保存在单独的事务中。这应该是显而易见的:每项创建一个事务。
  2. 不需要Rollback。如果不使用Commit,总是会发生回滚。只需删除所有错误处理代码。
  3. 你吞下异常,这样你就永远找不到问题了。
  4. 我不明白你为什么那么频繁地给SaveChanges打电话。为什么不在最后一次?
票数 1
EN

Stack Overflow用户

发布于 2014-06-29 17:48:56

为什么不对所有订单使用单个事务(例如,将事务放到循环之外)?

如果您愿意接受这样一种情况:一些订单保存了,而另一些订单没有保存,这很好,但是就像#usr说的那样,您只需要在提交事务之前进行一次SaveChanges,并且您应该记录被拒绝的订单。

例如,如果需要获取新创建实体的标识,则需要多个SaveChanges。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24478434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档