您的位置:首页 > 编程语言 > PHP开发

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

2013-07-04 22:01 525 查看
在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附带了将导入的存储过程转换为方法的选项。



这样就可以直接在程序端调用方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐