c# - Dapper的execute方法对于插入和删除返回两种不同的结果

标签 c# sql dapper

当我将 Dapper 的 Execute 方法用于 INSERT 存储过程时,如果查询成功,它将返回 1 正如预期的那样,但是当我将它用于 DELETE 存储过程时,即使查询成功,它也会返回 -1 。在这种情况下,DELETE存储过程的成功是“-1”?

 public override int Insert(Language entity)
        {
            var parameters = new DynamicParameters();
            parameters.Add("Id", dbType: DbType.Int32, direction: ParameterDirection.Output);
            parameters.Add("Name", entity.Name, DbType.String);
            parameters.Add("Culture", entity.Culture, DbType.String);
            parameters.Add("Published", entity.Published, DbType.Boolean);
            parameters.Add("DisplayOrder", entity.DisplayOrder, DbType.Int32);
            int numberOfRowsAffected = Connection.Execute("Language_Insert", 
                parameters, commandType: CommandType.StoredProcedure);
            // numberOfRowsAffected = 1
            return parameters.Get<int>("Id");
        }

 public override bool Delete(int primaryKey)
        {
            var parameters = new DynamicParameters();
            parameters.Add("Id", primaryKey, DbType.Int32);
            int numberOfRowsAffected = Connection.Execute("Language_Delete",
                parameters, commandType: CommandType.StoredProcedure);
            // numberOfRowsAffected = -1
            return numberOfRowsAffected > 0;
        }

最佳答案

Dapper 无法查看存储过程的内部;这两种情况下的任何不同之处都是特定于这两个命令的内部结构的。最终,dapper 只是从 ExecuteCommand 返回值。

有一些因素可能会导致差异:

  • 设置 NOCOUNT ON
  • 存在TRIGGER(包括CASCADESET NULL等约束/外键子句)
  • INSERT/DELETE之后的附加操作

如果您希望从此类操作中获得可靠的值,则应使用 OUTPUTRETURN 参数,通过 @@ROWCOUNT 设置.

关于c# - Dapper的execute方法对于插入和删除返回两种不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914778/

相关文章:

c# - 您可以将 LINQ 与内存对象一起使用而不是 SQL Server 查询来提高性能吗?

c# - System.Runtime.InteropServices.GuidAttribute 是否用于除 COM 互操作之外的任何内容

c# - 为 Prism Eventaggregator WPF 使用通用的 PubSubEvents

c# - MSMQ Receive() 方法超时

MySQL 函数将工作日数添加到 DATETIME

dapper - 什么 .Net orms 或 MicroOrms 支持异步操作和 PostgreSql

c# - 如何在 C# 中使用 select count() as ...

c# - 如何在 Dapper 中使用 Char 和 VarBinary?

sql - Redshift 上的无效数字

sql - PostgreSQL 中日期的数据类型