如何在EF 6中使用事务保存列表
本文关键字:事务 保存 列表 EF | 更新日期: 2023-09-27 18:10:55
我正试图找到最合适的方法来保存使用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
...
}
}
}
}
- 您在单独的交易中保存项目。这应该是显而易见的:您为每个项目创建一个事务。
- 不需要
Rollback
。如果不执行Commit
,则总是会发生回滚。请删除所有错误处理代码。 - 你吞下异常,这样你就永远不会发现问题。 我不明白你为什么经常打电话给
SaveChanges
。为什么不在最后说一次呢?为什么不为所有订单使用单个事务(例如将事务置于循环之外)?
如果你愿意接受一个场景,有些订单被保存,有些没有,这是好的,但就像#usr说的,你只需要在提交事务之前SaveChanges一次,你应该记录被拒绝的订单。
多个SaveChanges是必要的,如果你需要得到一个新创建的实体的身份。