【问题标题】:EF 6 omit optional parameters when calling a stored procedure using Database.SqlQueryEF 6 在使用 Database.SqlQuery 调用存储过程时省略可选参数
【发布时间】:2017-09-06 12:49:19
【问题描述】:

我正在尝试仅使用一部分可选参数调用存储过程,但看起来我必须包含所有参数才能使 Database.SqlQuery 正常运行。是这种情况,还是有一种解决方法可以让我只需要传递我关心的参数?

我实际上是在尝试执行以下操作,其中存储过程有很多输入参数,其中一些是可选的。我希望能够调用该过程并且只传递我需要的参数。

CREATE PROCEDURE [dbo].[SP_MySP] 
    @One INT, 
    @Two INT = NULL,
    @Three INT,
    @Four INT = NULL ...

var paramOne = new SqlParameter("@One", firstValue);
var paramThree = new SqlParameter("@Three", thirdValue);
var paramFour = new SqlParameter("@Four", fourthValue);

var result = DataContext.Database.SqlQuery<MySPEntity>("EXEC SP_MySP @One,  @Three, @Four"
, paramOne, paramThree, paraFour).ToList();

return result;

【问题讨论】:

  • 您能否添加一些示例代码来解释您已经尝试过的内容?
  • 我不认为提供的链接对 EF6 有效。我认为是EF5及以下。
  • 我遇到了同样的问题。我相信这是一个错误。如果您必须指定可选参数,则它违背了使用可选参数的目的,但如果它实际上是已知要求,则应该抛出异常而不是成功返回 0 结果,就好像查询已正确运行一样。

标签: c# entity-framework-6


【解决方案1】:

我知道这是旧的,因为没有人回答我想我会回答,以防有人遇到这个问题。 要传递可选参数,您必须在查询中指定 SQL 参数名称。获取您的代码,您需要这样做

var 结果 = DataContext.Database.SqlQuery("EXEC SP_MySP @One=@one, @Three=@Three, @Four=@Four" , paramOne, paramThree, paramFour).ToList(); 这就是我让它在我的代码中工作的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多