EF中存储过程中的输出参数

发布于 2024-11-10 14:18:49 字数 726 浏览 2 评论 0原文

我有一个包含大量复杂存储过程的现有数据库,我想通过 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 属性进行映射。使用结果绑定从函数调用返回值。

I have an existing database with lots of complex stored procedure and I want to use those procedure through EF 4. I have done the following:

  1. Created an EF data object, Customer.
  2. Added a Stored Procedure into the EF
  3. Right Click on the EF designer and add a function import.
  4. Function Import Name - MyFunction, complex type.

Resulting code:

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

Now my stored procedure has an output parameter which I used to call by the ref (in WebForm). But I am getting the below error:

cannot convert from 'ref string' to
'System.Data.Objects.ObjectParameter'

Please help

Edit

When I am trying to save I am getting the below error

A mapping function binding specifies a function Model.Store.P_GetCustomer with an unsupported parameter: o_MyString. Output parameters may only be mapped through the RowsAffectedParameter property. Use result bindings to return values from a function invocation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尘世孤行 2024-11-17 14:18:49

输出参数在 ObjectParameter 实例中返回。因此,您必须使用如下代码:

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

原因是函数导入无法使用 ref 参数,因为只有在处理数据库中的结果集时才会填充输出参数 = 如果您不调用 ToList 或迭代结果存储过程的输出参数为空。

Output parameters are returned in ObjectParameter instance. So you must use code like:

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

The reason is that function import cannot use ref parameter because output parameter is not filled until you process result set from the database = if you don't call ToList or iterate the result of the stored procedure the output parameter is null.

泅渡 2024-11-17 14:18:49

msdn 建议如下:

创建过程 dbo.GetDepartmentName
     @IDINT,
     @名称 NVARCHAR(50) 输出
作为
     选择@名称 = 名称
     来自部门
     WHERE 部门 ID = @ID

解决方案

使用 (SchoolEntities context = new SchoolEntities())
{
   // name 是一个输出参数。

   ObjectParameter name = new ObjectParameter("名称", typeof(String));
   context.GetDepartmentName(1, 名称);
   Console.WriteLine(名称.值);
}

msdn suggests the following:

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

Solution

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文