ASP.NET Core MVC分层架构数据插入无报错但失败求助
问题排查:ASP.NET Core MVC PostgreSQL插入无报错但失败
我正在开发采用PostgreSQL数据库的ASP.NET Core MVC(N层架构)项目,目前可正常从表中查询数据,但执行插入操作时无任何报错却失败,尝试AJAX方式也未在日志中发现错误,请求协助排查。
控制器代码
[HttpGet] public IActionResult AddTask() { return View(); } [HttpPost] public IActionResult AddTask(TaskList taskList) { taskList.CreateDate = DateTime.Now; taskList.FinishDate = DateTime.Now; taskList.CreateUser = 1; taskList.Status = false; //taskList.Priority = 1; taskListManager.itemAdd(taskList); return RedirectToAction("Home/Index"); }
视图代码
@using EntityLayer.Concrete; @model List<TaskList> <form method="post"> <div class="card"> <div class="card-body"> <div style="text-align:right"> <button class="btn btn-primary" id="btnNewTask" type="button">Yeni Görev Oluştur</button> </div> <div class="card-body p-4"> <h5 class="card-title fw-semibold mb-4">Bekleyen İşlerim</h5> <div class="table-responsive"> <table class="table text-nowrap mb-0 align-middle"> <thead class="text-dark fs-4"> <tr> <th class="border-bottom-0"> <h6 class="fw-semibold mb-0">Oluşturan Kullanıcı</h6> </th> <th class="border-bottom-0"> <h6 class="fw-semibold mb-0">Konu Başlığı</h6> </th> <th class="border-bottom-0"> <h6 class="fw-semibold mb-0">Öncelik</h6> </th> <th class="border-bottom-0"> <h6 class="fw-semibold mb-0">Oluşturma Tarihi</h6> </th> <th class="border-bottom-0"> <h6 class="fw-semibold mb-0">Durum</h6> </th> <th class="border-bottom-0"> <h6 class="fw-semibold mb-0">Detay</h6> </th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td class="border-bottom-0"> <h6 class="fw-semibold mb-1">@item.CreateUser</h6> <span class="fw-normal">Kendim</span> </td> <td class="border-bottom-0"> <p class="fw-semibold mb-1l">@item.TaskTitle</p> </td> <td class="border-bottom-0"> <div class="d-flex align-items-center gap-2"> @if (item.Priority == 1) { <span class="badge bg-secondary rounded-3 fw-semibold">Düşük</span> } @if (item.Priority == 2) { <span class="badge bg-success rounded-3 fw-semibold">Normal</span> } @if (item.Priority == 3) { <span class="badge bg-danger rounded-3 fw-semibold">Yüksek</span> } </div> </td> <td class="border-bottom-0"> <h6 class="mb-0 fw-normal">@item.CreateDate</h6> </td> <td class="border-bottom-0"> @if (item.Status == false) { <span class="badge bg-warning rounded-3 fw-semibold">Bekleniyor</span> } @if (item.Status == true) { <span class="badge bg-dark rounded-3 fw-semibold">Tamamlandı</span> } </td> <td class="border-bottom-0"> <button class="btn btn-light m-1" id="btnDetay" type="button" href="#">Detaya Git</button> </td> </tr> } </tbody> </table> </div> </div> </div> </div> <div class="modal" id="myModal"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title">Yeni İş Oluştur</h4> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body"> <label class="form-label">Konu Başlığı</label> <input class="form-control" id="txtAddTaskTitle" name="TaskTitle" placeholder="Konu Başlığı Giriniz" /> <br /> <label class="form-label">Açıklama</label> <input class="form-control" id="txtAddTaskDetails" name="TaskDetails" placeholder="Konu İle İlgili Açıklama Giriniz" /> <br /> <label class="form-label">Öncelik</label> <select class="form-control" name="Priority" id="ddlPriority"> <option value="0">Lütfen Öncelik Durumunu Seçiniz</option> <option value="1" class="badge bg-secondary rounded-3 fw-semibold">Düşük</option> <option value="2" class="badge bg-success rounded-3 fw-semibold">Normal</option> <option value="3" class="badge bg-danger rounded-3 fw-semibold">Yüksek</option> </select> </div> <div class="modal-footer"> <button type="submit" class="btn btn-primary m-1" id="btnAddTask">Ekle</button> </div> </div> </div> </div> </form> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js"></script>
排查方向
- 模型验证问题:检查
TaskList实体是否有必填字段未赋值,比如Priority默认选中值是0,若实体要求该字段必须为1/2/3,会导致模型验证失败但未处理错误。可在控制器中添加if (!ModelState.IsValid)判断,返回视图并显示错误。 - 事务未提交:查看
taskListManager.itemAdd方法是否开启了事务但未提交,PostgreSQL默认需要显式提交事务(除非使用自动提交模式)。 - 主键生成策略:确认
TaskList表的主键是否设置了正确的生成方式(比如自增序列),若主键未自动生成且未手动赋值,插入会失败但可能无报错。 - 数据库权限:检查连接数据库的账号是否有插入表的权限,虽然查询正常,但插入权限可能缺失。
- 日志详细程度:调整日志级别到Debug,查看EF Core生成的SQL语句,直接在PostgreSQL中执行该SQL,确认是否有隐藏错误。
- 表单提交问题:视图中的表单是否正确绑定模型,比如
Priority的name属性是否和实体属性名一致,或者是否有字段未正确提交。可在控制器中打印taskList对象,查看属性值是否为空或不符合要求。
内容的提问来源于stack exchange,提问作者Gökmen Ada
相关产品推荐
相关产品推荐

