'Procedure Has Too Many Arguments' 错误虽然我只有两个

'Procedure Has Too Many Arguments' Error Although I Have Only Two

我检查了与此问题相关的其他 post,但找不到任何答案。

我的酒店 api 有一个 post 操作方法,在酒店存储库中我有下面这个 CreateHotel 方法。我只输入了两个参数,存储过程中也有两个参数,但出现此错误:System.Data.SqlClient.SqlException (0x80131904): Procedure or function CreateHotel has too many arguments specified.

public async Task<Hotel> CreateHotel(Hotel hotel)
    {
        var sql = "CreateHotel";

        var newHotel = new Hotel()
        {
            Name = hotel.Name,
            City = hotel.City
        };

        using (var connection = new SqlConnection(CONNECTION_STRING))
        {
            return await connection
                .QueryFirstAsync<Hotel>(sql, newHotel, commandType: CommandType.StoredProcedure);
        }
    }

这里是酒店实体,以备不时之需:

 public class Hotel
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [StringLength(50)]
    [Required]
    public string Name { get; set; }

    [StringLength(50)]
    [Required]
    public string City { get; set; }
}

这就是 CreateHotel SP:

CREATE PROCEDURE CreateHotel @Name CHAR(50), @City CHAR(50)
AS
INSERT INTO Hotels (Name, City)
OUTPUT inserted.*
VALUES (@Name, @City)
GO

我可以告诉你一件有趣的事情是 Name 在 'INSERT INTO Hotels (Name, City)' 中键入后会自动变灰。但是鼠标悬停时检测到是name栏

您知道错误的原因吗?

您的酒店实体有一个 ID 属性,它将自动初始化为 0,因此您将 3 个参数传递给 Dapper 和存储过程。

相反,您可以使用匿名参数来传递参数。

using (var connection = new SqlConnection(CONNECTION_STRING))
{
    return await connection
            .QueryFirstAsync<Hotel>(sql, new { Name = hotel.Name, City = hotel.City} , commandType: CommandType.StoredProcedure);
}