我正在使用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;
答案 0 :(得分:2)
行计数将单独返回。您在这里看到的是查询的退出状态。
ExecuteSqlCommand
返回值用于查询状态而不是行计数。您可能希望使用datareader或类似的东西来返回rowcount。
答案 1 :(得分:0)
这是datacontext的工作方式,请看这个链接: Entity Framework: Database.ExecuteSqlCommand Method 显然,该命令正在更新两条记录。
答案 2 :(得分:0)
您的餐桌上有触发器吗?我确认此行为可能是由触发器引起的,因为受触发器影响的行已添加到受SQL命令影响的行数中。我通常检查返回值为0或> 0,以了解是否有任何影响。如果要调用存储过程,也可以返回输出变量。