C# 带错误跟踪的EF核心批插入
我正试图在系统中插入一些质量可能很差的数据,我需要一份“每行”的报告来说明发生了什么,所以我一直在尝试这样做C# 带错误跟踪的EF核心批插入,c#,entity-framework-core,C#,Entity Framework Core,我正试图在系统中插入一些质量可能很差的数据,我需要一份“每行”的报告来说明发生了什么,所以我一直在尝试这样做 public async Task<IEnumerable<Result<Invoice>>> AddAllAsync(IEnumerable<Invoice> invoices, Guid bucketId) { var results = new List<Result<Invoice>>();
public async Task<IEnumerable<Result<Invoice>>> AddAllAsync(IEnumerable<Invoice> invoices, Guid bucketId)
{
var results = new List<Result<Invoice>>();
log.Debug(invoices.ToJson());
foreach (var invoice in invoices)
{
try
{
results.Add(new Result<Invoice> { Success = true, Item = await AddAsync(invoice, bucketId), Message = "Imported Successfullly" });
await SaveChangesAsync();
}
catch (Exception ex)
{
results.Add(new Result<Invoice> { Message = ex.Message, Item = invoice });
}
}
return results;
}
公共异步任务AddAllAsync(IEnumerable发票,Guid bucketId)
{
var results=新列表();
log.Debug(invoices.ToJson());
foreach(发票中的var发票)
{
尝试
{
添加(新结果{Success=true,Item=await AddAsync(invoice,bucketId),Message=“importedsuccessfully”});
等待SaveChangesSync();
}
捕获(例外情况除外)
{
添加(新结果{Message=ex.Message,Item=invoice});
}
}
返回结果;
}
我的问题是,在单个add调用失败后,尝试的add会留在更改跟踪器中,因此使用不同的项再次调用add会再次引发第一个项的异常
是否有方法(不重建上下文)进行“批量插入”,并获得所有问题的每行/实体级别的详细信息,而不仅仅是第一个问题?为什么不在尝试将数据添加到数据库之前验证数据?因为这样做需要我问每个外键的问题,另一端是否有行。数据已经经过结构验证。