Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带错误跟踪的EF核心批插入_C#_Entity Framework Core - Fatal编程技术网

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会再次引发第一个项的异常


是否有方法(不重建上下文)进行“批量插入”,并获得所有问题的每行/实体级别的详细信息,而不仅仅是第一个问题?

为什么不在尝试将数据添加到数据库之前验证数据?因为这样做需要我问每个外键的问题,另一端是否有行。数据已经经过结构验证。