-3

我没有看到任何对使用 EF 调用存储过程(当前使用 4.3)而不传递任何参数的引用。这是否被认为是一种不好的做法,不支持或其他什么,因为我在任何地方都找不到答案,DBA 已存储许多程序没有输入参数。

任何人的例子。

4

4 回答 4

2

看来您不能传入空值。看看 ObjectParameter,它有一个重载。值和类型。

 public ObjectParameter(string name, object value);

 public ObjectParameter(string name, Type type);

您将需要使用 DBNull.Value 和 typeof(whatever) 等...
我通常在存储过程中创建一个输入参数作为解决方法,因为我没有时间用 null 来解决它。

于 2012-05-21T07:59:42.293 回答
0

I run into this same issue. If you pass in Null in place of your ObjectParameters it will throw an exception saying that you must have one.

If you pass in DBNull it says that you have specified a parameter on a Sproc that doesn't except parameters and throws an exception.

The only work around for this I have been able to come up with is to modify the sproc to accept a dummy parameter you do nothing with, to satisfy the requirement.

于 2012-05-21T14:41:14.363 回答
0

实际上,您可以通过仅调用存储过程的名称并省略参数来传递任何参数:

context.ExecuteFunction<TestSPROCResult>("TestSPROC");
于 2012-08-03T09:35:14.520 回答
0

如果您首先使用数据库,实体框架将在您创建/更新模型时在数据库中显示存储过程,包括没有输入参数的存储过程。您可以在模型中包含存储过程并在模型浏览器中添加函数导入。上下文通过调用非泛型ExecuteFunction方法来执行函数。(它说它“丢弃从函数返回的任何结果”,但事实并非如此,见下文)。

这是否是不好的做法?不必要。我可以想象用户可能希望在应用程序中触发的各种任务,例如执行复杂计算的某个后台进程或对性能敏感的进程。

也许比输入参数更重要的是 sproc 至少返回一些东西,以便应用程序可以通知用户 sproc 是否/何时/如何完成。目前,添加函数导入时,唯一的选择是返回一个集合,而不是单个标量值。这意味着存储过程中的RETURN语句将被 EF 忽略。它至少应该在SELECT语句中返回值,以便 EF 能够收集输出。

于 2012-05-24T09:03:09.447 回答