【问题标题】:Output parameter in stored procedure in EFEF 存储过程中的输出参数
【发布时间】:2011-05-31 20:11:56
【问题描述】:

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

【问题讨论】:

    标签: stored-procedures entity-framework-4 output-parameter


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。我也试过了,但问题仍然存在。我能够运行该应用程序,但是当我转到所需的 URL 时,我在 edmx 文件中收到相同的错误消息。
    • 你在存储过程中的输出参数是什么类型的?
    • 它是一个字符串,只是返回插入、更新状态以及表名和其他相关信息。 NVARCHAR(1000)
    • 这很奇怪 - 它应该可以工作。存储过程是否映射到实体的插入或更新?
    • 这可能会有所帮助:link 或此link
    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多