实体框架SaveChanges每100次插入

本文关键字:100次 插入 SaveChanges 框架 实体 | 更新日期: 2023-09-27 18:13:16

我在我们的数据库中插入几个数据,如:

forech ........
{
 try
 {
   //..process new item from external data
   //..assign data to the new item
   db.MyTable.Add(theNewItem)
   i++;
   if ((i % 100) == 0) db.SaveChanges();
 }
 catch (Exception e)
 {
   //ignore the error... can be duplicated row
   errors++;
 }
} //end foreach
if (db.ChangeTracker.HasChanges()) db.SaveChanges();

为了提高性能,我将每添加100条记录保存在DB中。我的问题是

如果在接下来的100条记录中,有1条是重复的,这将给我一个错误。但是…剩下的99个保存正确吗?

我现在无法验证这一点,我不在办公室,而且这个过程正在导入数据(大约)。100万)

实体框架SaveChanges每100次插入

你的问题的答案是双重的。

首先是"SaveChanges()做什么"的答案?此方法将从更改跟踪器获取所有记录,并将它们写入事务中的数据库。如果在这两个过程(收集和保存)中发生任何错误,它将回滚事务。

现在您知道了这一点,您的问题实际上是回滚事务中成功的操作是否被提交。他们没有,这就是交易的目的。因此,如果100次插入中有1次出现错误,则保存0次。

关于你的评论,你实际上是在寻找一种方法来批量插入记录。查找"批量复制",建议在实体框架中插入最快的方式。注意,如果任何插入失败,这仍然不起作用。在尝试插入之前清理数据。