实体框架SaveChanges每100个插入

时间:2015-09-18 15:29:13

标签: c# entity-framework

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

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();

对于性能我在DB中保存了每100条记录。 我的问题是:

如果在接下来的100条记录中,1重复,则会给我一个错误。但是......其他人99被正确保存了吗?

我现在无法验证这一点,我不在办公室,正在运行导入数据(约100万)

1 个答案:

答案 0 :(得分:2)

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

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

现在您知道了,您的问题实际上是回滚事务中的成功操作是否已提交。他们不是,这完全是交易的目的。因此,如果100个插入中的1个记录产生错误,则0保存。

关于您的评论,您实际上正在寻找批量插入记录的方法。按Fastest Way of Inserting in Entity Framework中的建议查找"批量复制"。请注意,如果任何插入失败,这仍然无法工作。在尝试插入之前清理数据。