C# 使用EF导入数据。尽管存在无效ID(引发异常),context.saveChanges()如何保存有效的?

C# 使用EF导入数据。尽管存在无效ID(引发异常),context.saveChanges()如何保存有效的?,c#,asp.net-mvc,entity-framework,transactions,transactionscope,C#,Asp.net Mvc,Entity Framework,Transactions,Transactionscope,有时我会将5000多行(不同实体类型)导入数据库。我使用实体框架,我希望上下文保存适合我的模型的行,如果有无效的行,它们应该被丢弃 我在交易中,所以: 我需要在迭代结束时决定是要完成()transacion还是Dispose(),这取决于引发异常的实体类型 我认为有两种可能性: 在上下文之前检查实体对象是否有效。添加(对象) 添加5000个项,并以某种方式设置context.SaveChanges(),保存有效项并放弃无效项(现在它抛出异常并放弃所有添加的项) 我要的是一段代码,或者一些我可以遵

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

我在交易中,所以: 我需要在迭代结束时决定是要完成()transacion还是Dispose(),这取决于引发异常的实体类型

我认为有两种可能性:

  • 在上下文之前检查实体对象是否有效。添加(对象)
  • 添加5000个项,并以某种方式设置context.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 */ }
     }
    

    我的实体中没有isValid()方法,因此没有验证逻辑。是否要忽略SQL错误?这不起作用,因为上下文可能会添加无效实体,因此每次我尝试添加新项时(如果存在无效项)您将得到一个例外,因为您不处理上下文。我在事务中,因此无法处理我的上下文。很抱歉,您说您在事务中,从而改变了问题的全部含义。祝你好运,伙计。这可能会有帮助