我在我们的数据库中插入了几个数据,如:
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万)
答案 0 :(得分:2)
你的问题的答案是双重的。
首先是" SaveChanges()
做什么" 的答案?此方法将从更改跟踪器获取所有记录,并在事务中将它们写入数据库。如果在任何一个进程(收集和保存)期间发生任何错误,它将回滚事务。 This is documented
现在您知道了,您的问题实际上是回滚事务中的成功操作是否已提交。他们不是,这完全是交易的目的。因此,如果100个插入中的1个记录产生错误,则0保存。
关于您的评论,您实际上正在寻找批量插入记录的方法。按Fastest Way of Inserting in Entity Framework中的建议查找"批量复制"。请注意,如果任何插入失败,这仍然无法工作。在尝试插入之前清理数据。