我正在尝试使用DBSet.AddRange()
推送100个动态创建的产品实体。
例如,如果1st Product实体存在一些数据问题并抛出Commit()
期间出现异常,所有剩余的99个产品实体也没有去拯救。
是否可以跳过损坏的实体,以便其他实体可以使用DBSet.AddRange()
保存吗?
您不能使用EF执行此操作,您必须更改逻辑并在将实体添加到EF上下文之前验证实体。或者,你必须单独添加它们,并在每个之后提交,但这会降低效率。
因为不可能跳过无效实体。我会亲自做这件事。
- 我首先尝试做一个AddRange
- 然后处理一个异常,当添加批次失败时,逐个执行
至少这样,你可以平衡它。
try
{
await entities.AddRange(batch);
await unitOfWork.Save();
}
catch (Exception ex)
{
await SaveEntities(batch);
}
public void SaveEntities(List<Entity> entities)
{
foreach (var item in entities)
{
// add one by one.
}
}