【发布时间】:2021-09-10 19:43:57
【问题描述】:
当我使用 Entity Framework Core 在 MSQL Server 中调用存储过程时,我得到一个返回值 -1。这是受影响的行数。
首先,这是错误的,因为我的存储过程从表中删除了多个条目。对我来说更奇怪的是该值是负数。通常我会假设这表示错误,但我的存储过程已执行并且数据按预期更改。
这是我的 C# 代码:
var rowsAffected = await this.dbContext.Database.ExecuteSqlRawAsync("dbo.sp_DeleteSomeStuff").ConfigureAwait(false);
存储过程如下所示:
CREATE PROCEDURE sp_DeleteSomeStuff
AS
BEGIN
BEGIN TRANSACTION;
DECLARE @result int;
EXEC @result = sp_getapplock @Resource = 'DeleteSomeStuffLock',
@LockOwner='Transaction',
@LockMode = 'Exclusive';
-- result code 0 or 1 = success (error codes are negative)
IF @result >= 0
BEGIN
SET NOCOUNT ON;
DELETE FROM [dbo].[MyTable]
WHERE [Expiration] < (CURRENT_TIMESTAMP);
COMMIT TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION;
END;
RETURN @result;
END
GO
-1 是什么意思?有没有办法从我的存储过程中获取受影响行的实际计数?
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀!
标签: c# sql sql-server stored-procedures entity-framework-core