【问题标题】:dapper.net multiple delete issuedapper.net 多次删除问题
【发布时间】: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 代替

标签: c# dapper micro-orm


【解决方案1】:

第二个操作应该使用 Execute,而不是 Query。基本上,这不是一个查询。这应该就是你所需要的。

【讨论】:

  • @marc-grawell 如何使用 Dapper 的 IN,如果我想删除多行,例如从 id IN(1,2,3,4) 的表名中删除
  • @marc-grawell 如果我有一个像 1,2,3,4 这样的 id 数组
  • @MeerDeen connection.Execute("...where Id in @ids ...", new { ids });
  • @marx-gravell 如果我在 wpf,c# 我的项目上启用签名,为什么 dapper.dll 无法加载
  • @MeerDeen 现在尝试使用Dapper.StrongName - 相同的代码,不同的包;从长远来看,我们可能只会制作 2.0 强名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多