之前版本的的EF 是不支持output参数的,但是现在新的版本是可以的了。
旧版本要是想要获取output参数,请参考这篇文章:http://www.cnblogs.com/xray2005/archive/2009/06/03/1495112.html
下面说下怎么样获取output参数值。
存储过程如下:
CREATE PROCEDURE [dbo].[GetNameByCustomerId] @CustomerId varchar(5), @ContactName varchar(30) output AS BEGIN SET NOCOUNT ON; SELECT @ContactName=ContactName FROM Customers WHERE CustomerID=@CustomerId; END GO
下面将存储过程导入,Return Type 选择 None:
这个时候我们可以看下代码:
/// <summary> /// No Metadata Documentation available. /// </summary> /// <param name="customerId">No Metadata Documentation available.</param> /// <param name="contactName">No Metadata Documentation available.</param> public int GetNameByCustomerId(global::System.String customerId, ObjectParameter contactName) { ObjectParameter customerIdParameter; if (customerId != null) { customerIdParameter = new ObjectParameter("CustomerId", customerId); } else { customerIdParameter = new ObjectParameter("CustomerId", typeof(global::System.String)); } return base.ExecuteFunction("GetNameByCustomerId", customerIdParameter, contactName); }
代码里有两个参数,其中一个是ObjectParameter,属性有下面几个:
· Name:获取参数名称,该名称只能通过构造函数来设置
· Value: 获取或者设置参数值
下面我们就可以通过该参数的Value 属性来获得Output 参数的值了,代码如下:
[Test] public void GetNameByCustomerId() { using(var db = new NorthwindEntities()) { ObjectParameter output = new ObjectParameter("ContactName", typeof(string)); db.GetNameByCustomerId("ALFKI", output); Console.WriteLine(output.Value); //输出:Maria Anders } }
这样我们就可以获得Output 参数的值了。