使用 EF 导入数据.context.saveChanges() 如何保存有效的,尽管存在无效(抛出异常)



有时我会将 5000+ 行(不同实体类型)导入我的数据库。我使用实体框架,我希望上下文保存适合我的模型的行,如果有无效的行,则应丢弃它们。

我在交易中,所以:我需要在迭代结束时决定是要 Complete() 交易还是 Dispose(),这取决于哪种实体抛出异常。

我认为有两种可能性:

  1. 在上下文之前检查实体对象是否有效。添加(对象)
  2. 添加 5000 个项目,并以某种方式设置该上下文。SaveChanges() ,保存有效的并丢弃无效的(现在它会抛出异常并丢弃所有添加的项目)。

我要求一段代码,或者我可以遵循的一些指示来解决这种情况。我只想导入有效项目并生成无效项目的日志。

谢谢。如果你解决它,我会标记为答案。

选项 1 是更明智的方法。 添加 5000 个对象然后保存更改是非常不高性能的。 更好的方法是

 while (null != (entity = GetNextEntity())
 {
    if (entity.IsValid())
    {
        context.Add(entity);
        context.SaveChanges();
    }
 }

更新 -- 忽略 SQL 错误

 while (null != (entity = GetNextEntity())
 {
    try
    {
        context.Add(entity);
        context.SaveChanges();
    }
    catch (Exception) { /* eat it */ }
 }

相关内容

最新更新