Dapper - "必须声明标量变量@VersionId"

Jak*_*134 1 c# sql asp.net dapper

我正在尝试使用Dapper对我本地计算机上可用的数据库执行一些简单查询.

大多数查询工作正常,但是当我尝试将对象插入数据库中的相应表时,我得到了一个SqlException.我有一个类似的插入方法,首先实例化方法体内的对象并将其插入数据库,该方法工作正常.但是这个没有.更具体地说,这是异常的回应:

System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@VersionId".'
Run Code Online (Sandbox Code Playgroud)

以下是产生异常的调用代码:

public int CreateNewSchema(Schema schema)
        {
            string sql = "INSERT INTO Schemas(VersionId, Created, Updated, SchemaData) " +
                         " values (@VersionId, @Created, @Updated, @SchemaData);";

            var affectedRows = _connection.Execute(sql, new{schema});
            return affectedRows;
        }
Run Code Online (Sandbox Code Playgroud)

我的数据库中相应的Schema表具有以下设计.

Schema 
ID             int
VersionID      nvarchar(max)
Created        datetime2(7)
Updated        datetime2(7)
SchemaData     nvarchar(max)
Run Code Online (Sandbox Code Playgroud)

最后,我试图在此表中插入的POCO对象定义如下:

public class Schema
    {
        public int ID { get; set; }
        public string VersionId { get; set; }
        public DateTime Created { get; set; }
        public DateTime Updated { get; set; }
        public string SchemaData { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

lor*_*ond 5

直接传递对象:

var affectedRows = _connection.Execute(sql, schema);
Run Code Online (Sandbox Code Playgroud)

精巧分析传递对象的属性.

您只传递了一个属性的对象schema.因此@schema,您将在查询中获得唯一的变量.如果按原样传递对象,而不是另一个对象的一部分,则将获得预期的变量,这些变量对应于Schema对象属性.