在 SqlQuery<>(sql, parameters) 之后我需要 <> 吗?什么时候returns什么都没有?

Do I need <> after a SqlQuery<>(sql, parameters); when it returns nothing?

我正在对存储过程执行查询:

var sql = @"dbo.sp_put_question_responses @AnswerGridResponses,
                                                      @UpdateRowCount OUT,
                                                      @UserId,      
                                                      @UserTestQuestionId";
            var parameters = new SqlParameter[]
                        {  
                            new SqlParameter("@AnswerGridResponses", answerGridResponses),
                            new SqlParameter("@UpdateRowCount", SqlDbType.Int) { Direction = ParameterDirection.Output },
                            new SqlParameter("@UserId", userId),
                            new SqlParameter("@UserTestQuestionId", userTestQuestionId)
                        };

            var query = db.Database.SqlQuery<PutTestQuestionResponsesDTO>(sql, parameters);
            var putTestQuestionResponses = await query.FirstOrDefaultAsync();
            var updateRowCount = (int)parameters[1].Value;
            if (updateRowCount == 0) return BadRequest(); else return Ok();

存储过程在这里:

CREATE PROCEDURE [dbo].[sp_put_question_responses] 
    @AnswerGridResponses     VARCHAR(20),   
    @UpdateRowCount     INT OUTPUT,
    @UserId             INT, 
    @UserTestQuestionId INT
AS
BEGIN   
      UPDATE  UserTestQuestion      
      SET     AnswerGridResponses = @AnswerGridResponses,
              Answered = 1
      WHERE   UserTestQuestionId = @UserTestQuestionId
      AND     UserId = @UserId
      SET    @UpdateRowCount = @@ROWCOUNT
END

以前它在 SELECT 中返回一些数据,但现在它 returns 通过参数返回所有数据。

谁能给我解释一下。现在我不再返回 select 我应该在 <> 括号内放什么:

 db.Database.SqlQuery<PutTestQuestionResponsesDTO>(sql, parameters);

我什至需要指定任何内容还是应该写 <>

MSDN 中描述的 SQLQuery<> 方法只有两个实现。

您正在使用方法的第一个重载版本。

定义

public DbRawSqlQuery<TElement> SqlQuery<TElement>(
    string sql,
    params Object[] parameters
)

所以从定义中可以清楚地看出,您需要在那里提供通用的,因此您必须像下面那样做。

SqlQuery<SomeClass>(sql, parameters);

您可以像 SqlQuery<SomeClass>(sql, parameters); 这样提供空的 class 来使用 hack。但是不知道会不会异常。

或者作为替代方案,您可以使用 select 语句更新存储过程,例如 select 1 from tablename.

注:最后一个不推荐。