Dapper Orm 删除异常
Posted
技术标签:
【中文标题】Dapper Orm 删除异常【英文标题】:Dapper Orm delete exception 【发布时间】:2013-11-21 10:02:09 【问题描述】:我正在尝试使用 dapper orm 删除。但我得到了这个例外:
使用多映射 API 时,请确保设置 splitOn 参数,如果 您有除 Id 以外的密钥
我的代码如下所示:
public void DeleteRole(int ID)
using (var conn = new SqlConnection(connectionString))
conn.Open();
conn.Query("DELETE FROM [Role] WHERE ID=@ID", new ID=ID );
有什么想法吗?
【问题讨论】:
代码在您的编辑中急剧发生了变化。这是抛出的代码吗?为什么你在这里使用Query
而不是Execute
?
我更新了我的代码。我之前发布了错误的代码。
【参考方案1】:
为查询指定返回类型(整数)
int rowsCount = conn.Query<int>("DELETE FROM [Role] WHERE ID = @ID", new ID );
或者使用 Execute 方法,正如 Michael 指出的那样
注意:您不需要手动打开连接 - Dapper 会为您打开它。
顺便说一句,通用查询将适用于您的原始问题:
int id = conn.Query<int>(@"INSERT [Role] (Name, CreatedDate,UpdatedDate)
VALUES (@Name, @CreatedDate,@UpdatedDate)
SELECT CAST(scope_identity() as INT)", model).First();
【讨论】:
+1 因为受影响的行数可能是一个不错的返回值。 @MichaelPerrenoud 谢谢 :) 已经赞成你的答案,因为它的正确和执行返回整数(受影响的行数)。带有 SELECT 语句的参数化查询更适合原始问题【参考方案2】:这里的问题是您使用的是Query
而不是Execute
。 Query
方法正在尝试查找名为 Id
的列来构建结果集,但因为它不是查询,所以找不到。
【讨论】:
以上是关于Dapper Orm 删除异常的主要内容,如果未能解决你的问题,请参考以下文章
使用 Informix 和 Dapper 向查询添加参数失败并出现语法异常