Database.ExecuteSqlCommand返回错误的rowcount

时间:2014-10-20 16:58:19

标签: entity-framework-6 dml

我正在使用context.Database.ExecuteSql来更新表。正确执行where子句的更新并更新记录。但是,该方法为rowcount而不是1返回2.当我在SSMS中执行update语句时,返回的结果rowcount是1.有人能提供这方面的见解吗?

            string query =
            string.Format("update {0} set Description = '{1}', Code = '{2}', LastUpdatedBy = '{3}', LastUpdatedDate = '{4}' where ID = {5};",
                tableName,
                description,
                code,
                lastUpdatedBy,
                lastUpdatedDate,
                ID);

        int rowCount = 0;
        string message = string.Empty;

        using (DBContext context = new DBContext())
        {
            rowCount = context.Database.ExecuteSqlCommand(TransactionalBehavior.EnsureTransaction, query);
        }

        return rowCount == 0 ?  //this return 2 instead of 1.
            new SaveResult(SaveResult.MessageType.Error, string.Format("There was an error updating a record in the {0} table.", tableName), "Index") :
            new SaveResult(SaveResult.MessageType.Success, string.Format("The update of {0} was successful.", tableName), "Index");

这会在SSMS中返回rowcount = 1:

update zAddressTypes 
set Description = 'Current', Code = '101122', LastUpdatedBy = 'user', LastUpdatedDate = '10/20/2014 12:17:26 PM' 
where ID = 1; 

DECLARE @RowCount INTEGER = @@ROWCOUNT; 
select @RowCount;

3 个答案:

答案 0 :(得分:2)

行计数将单独返回。您在这里看到的是查询的退出状态。

ExecuteSqlCommand返回值用于查询状态而不是行计数。您可能希望使用datareader或类似的东西来返回rowcount。

答案 1 :(得分:0)

这是datacontext的工作方式,请看这个链接: Entity Framework: Database.ExecuteSqlCommand Method 显然,该命令正在更新两条记录。

答案 2 :(得分:0)

您的餐桌上有触发器吗?我确认此行为可能是由触发器引起的,因为受触发器影响的行已添加到受SQL命令影响的行数中。我通常检查返回值为0或> 0,以了解是否有任何影响。如果要调用存储过程,也可以返回输出变量。