Dapper操作SQL Server报错无效对象名GuestList且异步插入不生效
数据库操作异常问题求助
我在进行数据库操作时遇到异常,无法从网页端写入数据,使用的ORM框架为Dapper。执行db.Insert(guest.EditableGuest)时抛出Microsoft.Data.SqlClient.SqlException错误,提示「Invalid object name 'GuestList'」;将方法替换为db.InsertAsync(guest.EditableGuest)后报错消失,但数据没有实际写入数据库,也无法在宾客列表页展示对应记录。我曾尝试重写页面代码解决Visual Studio偶发异常问题,但本次操作无效。
GuestListController代码
using Dapper.Contrib.Extensions; using FYP_RSVP_MGMT.Helpers; using FYP_RSVP_MGMT.Models; using FYP_RSVP_MGMT.ViewModels; using Microsoft.AspNetCore.Mvc; using System.Linq; namespace FYP_RSVP_MGMT.Controllers { public class GuestListController : Controller { public IActionResult Index() { GuestListViewModel guest = new GuestListViewModel(); return View("Index", guest); } /* 创建或更新宾客RSVP回执 */ public IActionResult CreateUpdate(GuestListViewModel guest) { if (ModelState.IsValid) { using (var db = DbHelpers.GetConnection()) { /* 如果guestID为null,统计现有宾客数量确定下一个guestID,为避免并发冲突将异步插入数据库 */ if (guest.EditableGuest.GuestID == null) { guest.EditableGuest.GuestID = guest.Guests.Count; db.Insert<GuestList>(guest.EditableGuest); } /* 如果宾客已存在,更新其信息 */ else { GuestList dbItem = db.Get<GuestList>(guest.EditableGuest.GuestID); TryUpdateModelAsync<GuestList>(dbItem, "EditableGuest"); db.Update<GuestList>(dbItem); } } /* 宾客提交RSVP后跳转到宾客列表页——临时方案 */ return RedirectToAction("ViewGuestList", guest); } else { return View("ViewGuestList", new GuestList()); } } } }
后续还有编辑、删除相关代码,页面无报错,运行正常。
DB Helper类代码
public class DbHelpers { public static SqlConnection GetConnection() { return new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WeddingDB;"); } }
GuestList模型代码
public class GuestList { [ExplicitKey] public int? GuestID { get; set; } [Required] public string GuestName { get; set; } [Required] public string GuestType { get; set; } [Required] public string ContactDetails { get; set; } public bool PlusOne { get; set; } public string PlusOneName { get; set; } [Required] public string GuestResponse { get; set; } }
GuestListViewModel代码
public class GuestListViewModel { /* 创建全量宾客列表,EditableGuest存储待新增/编辑/删除的宾客对象实例 */ public List<GuestList> Guests { get; set; } public GuestList EditableGuest { get; set; } /* 从数据库查询所有已存在的宾客 */ public GuestListViewModel() { using (var db = DbHelpers.GetConnection()) { this.EditableGuest = new GuestList(); this.Guests = db.Query<GuestList>("Select * From GuestList").ToList(); } } }
GuestList视图代码
@model FYP_RSVP_MGMT.ViewModels.GuestListViewModel @{ ViewData["Title"] = "Guest RSVP"; } @* 提交RSVP回执的表单 *@ @using (var form = Html.BeginForm("CreateUpdate", "GuestList", FormMethod.Post)) { <div class="container" id="GuestRSVP"> <br /> <br /> <br /> @* 新人姓名与婚礼信息后续会根据登录账号动态调整 *@ <h3> Welcome to [Bride] and [Groom]'s Wedding</h3> <h4>[Church Location]</h4> <h4>[Wedding Date and Time]</h4> <div class="container" id="RSVPTable" style="align-content:center"> <table> <tr> <td>Guest Name: </td> <td>@Html.TextBoxFor(m => m.EditableGuest.GuestName)</td> </tr> <tr> <td>Guest Type: </td> <td>@Html.DropDownListFor(m => m.EditableGuest.GuestType, new List<SelectListItem> { new SelectListItem { Value = "Guest", Text = "Guest" }, new SelectListItem { Value = "Wedding Party", Text = "Wedding Party" } })</td> </tr> <tr> <td>Email Address: </td> <td>@Html.TextBoxFor(m => m.EditableGuest.ContactDetails)</td> </tr> <tr> <td>Plus One: </td> <td>@Html.CheckBoxFor(m => m.EditableGuest.PlusOne)</td> </tr> <tr> <td>Plus One Name: </td> <td>@Html.TextBoxFor(m => m.EditableGuest.PlusOneName)</td> </tr> <tr> <td>RSVP Response:</td> <td>@Html.DropDownListFor(m => m.EditableGuest.GuestResponse, new List<SelectListItem> { new SelectListItem { Value = "Accept", Text = "Accept with Pleasure" }, new SelectListItem { Value = "Decline", Text = "Decline with Regret" } })</td> </tr> </table> <br/> <button class="btnSubmitRSVP" type="submit" style="text-align:center"> <a asp-controller="GuestList" asp-action="CreateUpdate"></a> @(Model.EditableGuest.GuestID > 0? "Update": "Submit Response") </button> </div> </div> }
我的部分页面跳转逻辑是临时实现的,比如宾客提交RSVP后会跳转到全量宾客列表页,按理说不会影响核心逻辑;我的代码中从未出现过GuestLists命名,完全不清楚该错误来源是什么。我已确认数据库内存在GuestList表,如有需要我可以提供更多代码。
内容的提问来源于stack exchange,提问作者user14986000
相关产品推荐
相关产品推荐

