[英]Calling stored procedure with parameters
我有一个存储过程返回一个值,而不是一个数据集,我有问题让它与EF4一起工作。
我见过这个: http : //dotnet.dzone.com/news/how-retrieve-stored-procedure
这是我做的:我在模型中添加了一个过程,并导入了一个函数。
我遇到的第一个问题是我的过程中的参数被命名为@_Parameter_in
。 这使得EF将它们作为p_Parameter_in
因为它不能用下划线作为第一个字符。 然后,当我调用存储过程时,我可以在SQL Profiler调用中看到它查找@p_Parameter_in
,当然还有一个问题。
现在我重命名参数并查看SQL Trace - 一切看起来都很棒。 问题是我无法获得价值。 以下是我的代码的外观:
System.Data.Objects.ObjectParameter newKey = new System.Data.Objects.ObjectParameter("NewKey_out", typeof(Int32));
newKey.Value = 0;
context.GetNextSurrogateKey_v2("tTest", newKey);
在调用newKey.Value
,它总是0或我设置的任何值。 它没有带来价值。 我怀疑我的问题是我如何导入该功能。 我使用Scalars和数据类型Int32
。 出于某种原因,我禁用了“创建新的复杂类型”。 有谁有这个问题?
我在这里猜测,因为我看不到你正在调用的存储过程。 我想你想要检索存储过程返回的标量值,而不是存储过程中定义的输出参数的值。
我相信您想在EDM中定义一个新函数并将其指向存储过程。 快速谷歌有这个潜在的解决方案: http : //www.devtoolshed.com/using-stored-procedures-entity-framework-scalar-return-values
HTH
问题是在datareader结束读取后EF过程输出参数。 这通常是在调用DataBind()函数之后。 我有更长的处理程序同样的问题。 我通过在ObjectResult上使用.ToList()函数来解决这个问题。
var rowsCount = new ObjectParameter("RowsCount", typeof(Int32));
var result = db.GetProductList(pageSize, pageNumber, rowsCount).ToList();
this.ProductsCount = (int?)rowsCount.Value;
您可以使用FirstOrDefault()函数解决单行或值。
我和Jan Remunda描述的问题一样。 有人将返回类型从Integer更改为Entity.Core.Objects.ObjectResult(Integer?),导致始终不返回任何内容。
对我们来说,解决方案是强制EF通过将.FirstOrDefault()函数添加到返回来读取存储过程的返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.