13

我有一个包含许多复杂存储过程的现有数据库,我想通过 EF 4 使用这些过程。我已经完成了以下操作:

  1. 创建了一个 EF 数据对象,Customer.
  2. 在 EF 中添加了一个存储过程
  3. 右键单击 EF 设计器并添加函数导入。
  4. 函数导入名称 - MyFunction,复杂类型。

结果代码:

CustomerEntities entity = new CustomerEntities();
var result = entity.MyFunction("XYZ", ref o_MyString);

现在我的存储过程有一个输出参数,我曾经通过 ref(在 WebForm 中)调用它。但我收到以下错误:

无法从“引用字符串”转换为“System.Data.Objects.ObjectParameter”

请帮忙

编辑

当我尝试保存时,出现以下错误

映射函数绑定使用不受支持的参数指定函数 Model.Store.P_GetCustomer:o_MyString。输出参数只能通过 RowsAffectedParameter 属性进行映射。使用结果绑定从函数调用返回值。

4

2 回答 2

36

输出参数在ObjectParameter实例中返回。所以你必须使用如下代码:

var oMyString = new ObjectParameter("o_MyString", typeof(string));
var result = ctx.MyFunction("XYZ", oMyString).ToList();
var data = oMyString.Value.ToString();

原因是函数导入不能使用 ref 参数,因为在您处理来自数据库的结果集之前不会填充输出参数 = 如果您不调用ToList或迭代存储过程的结果,则输出参数为空。

于 2011-05-31T20:52:18.560 回答
2

msdn建议如下:

CREATE PROCEDURE dbo.GetDepartmentName
     @ID INT ,
     @Name NVARCHAR(50) OUTPUT
AS
     SELECT   @Name = Name
     FROM     Department
     WHERE    DepartmentID = @ID

解决方案

using (SchoolEntities context = new SchoolEntities())
{
   // name is an output parameter.

   ObjectParameter name = new ObjectParameter("Name", typeof(String));
   context.GetDepartmentName(1, name);
   Console.WriteLine(name.Value);
}
于 2014-09-09T07:16:08.150 回答