首页 > 解决方案 > EF6 是否存在不保留到 db 的边缘情况,但没有抛出异常

问题描述

我有一个奇怪的边缘情况,发生率可能不到 1%,我无法理解可能的原因或复制。

一个 Xamarin 表单移动应用程序调用一个端点将数据插入到数据库中,如果成功每个人都高兴,如果没有,请稍后重试 - API 的技术堆栈有点旧,MVC 5 和实体框架 6,但不应该一个问题。

端点有一些需要的基本修复,但显示完整性:

public async Task<HttpResponseMessage> Post(SubmitDataDTO submitData)
{
    db = new DBContext();
    try
    {
        var parentId = Guid.NewGuid();
        foreach (var childItem in submitData.Children)
        {
            var child = new Children()
            {
                Id = Guid.NewGuid(),
                ParentId = parentId,
                //properties..
            };
            db.Children.Add(child);
        }

        var parent = new Parent()
        {
            Id = incomingId,
            //properties..
        };

        db.Parent.Add(parent);

        await db.SaveChangesAsync();

    }
    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
    {
        //LOG VALIDATION ERROR
        return new HttpResponseMessage(HttpStatusCode.InternalServerError);
    }
    catch (Exception exc)
    {
        //LOG ERROR
        return new HttpResponseMessage(HttpStatusCode.InternalServerError);
    }

    return new HttpResponseMessage(HttpStatusCode.OK);
}

移动应用端也很简单,如果response.IsSuccessStatusCode为 true,则将提交标记为成功处理。我们看到的是移动应用程序显示它已成功提交,但数据在服务器上不可用。

只有我能看到的解释,要么存在 SaveChanges 没有异常持续存在并且发送 OK 的边缘情况,要么存在 IIS/endpoint 发送成功但从未处理过端点的边缘情况。我真的很难过。

标签: asp.net-mvcapixamarin.formsentity-framework-6

解决方案


推荐阅读