【发布时间】:2014-08-13 16:12:57
【问题描述】:
我试图从一个 c# 类中具有两个不同变量的两个表中删除,但我收到以下错误消息:
使用多映射 API 时,如果您的键不是 Id,请确保设置 splitOn 参数 参数名称:splitOn
通过SQL Profiler捕获命令时sql语句执行得很好,所以我很难过。
简洁的代码是:
public void DeleteListCode(string listCodeId)
{
using (var block = new TransactionBlock())
{
// Get the code first
const string sql = "SELECT ListCode from ListCodes WHERE id =@listCodeId";
var code = TransactionBlock.Connection.Query<string>(sql, new {listCodeId}, TransactionBlock.Transaction)
.FirstOrDefault();
if (string.IsNullOrEmpty(code)) return;
const string sql2 = "delete from Lists WHERE ListCode = @code " +
"delete from ListCodes where Id = @listCodeId";
TransactionBlock.Connection.Query(sql2, new {listCodeId, code}, TransactionBlock.Transaction);
block.Commit();
}
}
我已经成功地使用了多选语句,但这在我使用两个匿名参数的意义上略有不同。
【问题讨论】:
-
由于您在删除时没有返回任何内容,我认为您应该使用
Execute而不是Query。 -
在第一次选择您使用
sql变量的位置执行该查询后,您是否考虑过执行RollBack命令,因为在选择时您只返回数据而不更改数据..?然后就像你正在做的那样执行第二个语句..?或将 sql2 字符串拆分为 2 个不同的事务.. 我也认为 petelids 有一个很好的点尝试做这样的事情TransactionBlock.Connection.Execute代替