我正试图找到最合适的方法来保存订单列表和使用EF6的付款列表。我想知道下面的示例代码是否正确,例如,foreach循环是否在正确的位置?
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
...
}
}
}
}发布于 2014-06-29 17:25:50
Rollback。如果不使用Commit,总是会发生回滚。只需删除所有错误处理代码。SaveChanges打电话。为什么不在最后一次?发布于 2014-06-29 17:48:56
为什么不对所有订单使用单个事务(例如,将事务放到循环之外)?
如果您愿意接受这样一种情况:一些订单保存了,而另一些订单没有保存,这很好,但是就像#usr说的那样,您只需要在提交事务之前进行一次SaveChanges,并且您应该记录被拒绝的订单。
例如,如果需要获取新创建实体的标识,则需要多个SaveChanges。
https://stackoverflow.com/questions/24478434
复制相似问题