Entity Framework如何获取存储过程中的output参数

在Entity Framework中,我们通常会用Function Import来将存储过程映射到程序段,从而可以用ObjectContextDbContext的实例像调用方法一样来调用存储过程。在包含有output参数的存储过程中,我们用一个简单的例子来说明应该如何处理。

数据库表:

CREATE TABLE Test
(
Id int primary key identity,
Name nvarchar(50) not null,
Description nvarchar(max)
)

存储过程:

CREATE PROCEDURE dbo.TestInsert   
@Name varchar(50),   
@Description varchar(max),     
@TestID int OUT   
AS   
INSERT INTO Test(Name,Description) VALUES(@Name,@Description)   
SET @TestID = SCOPE_IDENTITY()

第一步:

在Funtion Import的wizard中将Return Type设置为"None"


此时可以从Context类中发现此存储过程映射的方法

#region Function Imports    
/// <summary>
/// No Metadata Documentation available.
/// </summary>
/// <param name="name">No Metadata Documentation available.</param>
/// <param name="description">No Metadata Documentation available.</param>
/// <param name="testID">No Metadata Documentation available.</param>
public int TestInsert(global::System.String name, global::System.String description, ObjectParameter testID)
{
    ObjectParameter nameParameter;
    if (name != null)
    {
        nameParameter = new ObjectParameter("Name", name);
    }
    else
    {
        nameParameter = new ObjectParameter("Name", typeof(global::System.String));
    }

    ObjectParameter descriptionParameter;
    if (description != null)
    {
        descriptionParameter = new ObjectParameter("Description", description);
    }
    else
    {
        descriptionParameter = new ObjectParameter("Description", typeof(global::System.String));
    }

    return base.ExecuteFunction("TestInsert", nameParameter, descriptionParameter, testID);
}

#endregion

第二步:

从上面代码看到该方法需要三个参数,而第三个是一个ObjectParameter类型的参数,该类型有一个Value属性,之后我们就会通过该属性来获取output参数的值。

static void Main()
{
    using (TestEntities context = new TestEntities())
    {
        ObjectParameter output = new ObjectParameter("TestID", typeof(Int32));
        context.TestInsert("Allen", "Entity Framework", output);
        Console.WriteLine(output.Value);
    }
}


在VS2012中,甚至可以省去Function Import的过程,在将存储过程添加至Entity Model Designer的时候,VS2012附带了将导入的存储过程转换为方法的选项。


这样就可以直接在程序端调用方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值