You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:04