有时我会将 5000+ 行(不同实体类型)导入我的数据库。我使用实体框架,我希望上下文保存适合我的模型的行,如果有无效的行,则应丢弃它们。
我在交易中,所以:我需要在迭代结束时决定是要 Complete() 交易还是 Dispose(),这取决于哪种实体抛出异常。
我认为有两种可能性:
- 在上下文之前检查实体对象是否有效。添加(对象)
- 添加 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 */ }
}