如何解决EF中存储过程中的输出参数
| 我有一个包含许多复杂存储过程的现有数据库,并且我想通过EF 4使用这些过程。我已完成以下操作: 创建一个EF数据对象“ 0”。 在EF中添加了存储过程 右键单击EF设计器,然后添加功能导入。 函数导入名称-MyFunction
,复杂类型。
结果代码:
CustomerEntities entity = new CustomerEntities();
var result = entity.MyFunction(\"XYZ\",ref o_MyString);
现在,我的存储过程具有一个输出参数,我曾经使用该输出参数由ref(在WebForm中)调用。但是我收到以下错误:
无法从\'ref string \'转换为
\'System.Data.Objects.ObjectParameter \'
请帮忙
编辑
当我尝试保存时,出现以下错误
映射函数绑定使用不支持的参数o_MyString指定函数Model.Store.P_GetCustomer。输出参数只能通过RowsAffectedParameter属性进行映射。使用结果绑定从函数调用返回值。
解决方法
输出参数在“ 3”实例中返回。因此,您必须使用类似以下的代码:
var oMyString = new ObjectParameter(\"o_MyString\",typeof(string));
var result = ctx.MyFunction(\"XYZ\",oMyString).ToList();
var data = oMyString.Value.ToString();
原因是函数导入不能使用ref参数,因为直到处理来自数据库的结果集才填充输出参数=如果不调用ѭ5或对存储过程的结果进行迭代,则输出参数为null。
, 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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。