为什么 EF Core 始终使用此存储过程 return -1?
Why does EF Core always return -1 with this stored procedure?
我正在尝试针对 Local 2016 数据库使用 EF Core(最新版本),但我每次都得到 -1
。我不知道我做错了什么?
我知道它正在到达数据库。我查过了。
int returnCode = _dbContext.Database.ExecuteSqlCommand("CheckReceivedNotificationDuplicate @p0, @p1, @p2",
parameters: new[] { sendMessage.MESSAGE_TEMPLATE_NAME, sendMessage.MESSAGE_SUBJECT, sendMessage.MESSAGE_TEXT_SUMMARY });
存储过程:
ALTER PROCEDURE [dbo].[CheckReceivedNotificationDuplicate]
@MESSAGE_TEMPLATE_NAME nvarchar(100),
@MESSAGE_SUBJECT nvarchar(255),
@MESSAGE_TEXT_SUMMARY nvarchar(4000)
AS DECLARE @NMID Int
BEGIN
IF EXISTS (SELECT 1 FROM dbo.Notification WHERE MESSAGE_TEMPLATE_NAME = @MESSAGE_TEMPLATE_NAME
and MESSAGE_SUBJECT = @MESSAGE_SUBJECT AND ReceiveTimeEST > dateadd(minute,-5, dbo.GetGMTtoEST(getutcdate())))
BEGIN
IF EXISTS (SELECT 1 FROM dbo.Notification WHERE MESSAGE_TEMPLATE_NAME = @MESSAGE_TEMPLATE_NAME
and MESSAGE_SUBJECT = @MESSAGE_SUBJECT AND MESSAGE_TEXT_SUMMARY = @MESSAGE_TEXT_SUMMARY
AND ReceiveTimeEST > dateadd(minute,-5, dbo.GetGMTtoEST(getutcdate())))
RETURN -99
ELSE
RETURN 0
END
ELSE
RETURN 0
END
ExecuteSqlCommand
在内部调用 IRelationalCommand.ExecuteNonQuery
。它 return 是受影响的行数。
为了 return 来自存储过程的任意值,将输出参数添加到它的声明中并 ExecuteSqlCommand
调用:
var outParameter = new SqlParameter("@outParameter", DbType.Int32)
{
Direction = ParameterDirection.Output
};
context.Database.ExecuteSqlCommand("exec GetFoo @outParameter OUT", outParameter);
我正在尝试针对 Local 2016 数据库使用 EF Core(最新版本),但我每次都得到 -1
。我不知道我做错了什么?
我知道它正在到达数据库。我查过了。
int returnCode = _dbContext.Database.ExecuteSqlCommand("CheckReceivedNotificationDuplicate @p0, @p1, @p2",
parameters: new[] { sendMessage.MESSAGE_TEMPLATE_NAME, sendMessage.MESSAGE_SUBJECT, sendMessage.MESSAGE_TEXT_SUMMARY });
存储过程:
ALTER PROCEDURE [dbo].[CheckReceivedNotificationDuplicate]
@MESSAGE_TEMPLATE_NAME nvarchar(100),
@MESSAGE_SUBJECT nvarchar(255),
@MESSAGE_TEXT_SUMMARY nvarchar(4000)
AS DECLARE @NMID Int
BEGIN
IF EXISTS (SELECT 1 FROM dbo.Notification WHERE MESSAGE_TEMPLATE_NAME = @MESSAGE_TEMPLATE_NAME
and MESSAGE_SUBJECT = @MESSAGE_SUBJECT AND ReceiveTimeEST > dateadd(minute,-5, dbo.GetGMTtoEST(getutcdate())))
BEGIN
IF EXISTS (SELECT 1 FROM dbo.Notification WHERE MESSAGE_TEMPLATE_NAME = @MESSAGE_TEMPLATE_NAME
and MESSAGE_SUBJECT = @MESSAGE_SUBJECT AND MESSAGE_TEXT_SUMMARY = @MESSAGE_TEXT_SUMMARY
AND ReceiveTimeEST > dateadd(minute,-5, dbo.GetGMTtoEST(getutcdate())))
RETURN -99
ELSE
RETURN 0
END
ELSE
RETURN 0
END
ExecuteSqlCommand
在内部调用 IRelationalCommand.ExecuteNonQuery
。它 return 是受影响的行数。
为了 return 来自存储过程的任意值,将输出参数添加到它的声明中并 ExecuteSqlCommand
调用:
var outParameter = new SqlParameter("@outParameter", DbType.Int32)
{
Direction = ParameterDirection.Output
};
context.Database.ExecuteSqlCommand("exec GetFoo @outParameter OUT", outParameter);