asp.net-mvc - 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 发送成功但从未处理过端点的边缘情况。我真的很难过。
解决方案
推荐阅读
- templates - 使用 Deployment Manager 模板配置防火墙和启动脚本时出现问题
- flutter - 如何在 tabBarView 中有状态小部件?
- angular - 页面上多次使用组件时如何从父组件发回数据
- sql - 如何减少存储过程的执行时间?
- javascript - 通过与第一列进行比较来更改第二列的颜色
- ios - 将 JSON 转换为对象时,AlamofireObjectMapper 崩溃
- angular - 如何为 Angular 配置视口插件
- angular - 同步可观测角度
- java - 如何在多模块 Gradle 项目中构建分发包?
- javascript - 如何根据下拉选择代码点火器刷新值