entity framework – 存储过程返回值
我试图获取存储过程的返回值。 以下是此类存储过程的示例:
select Name, IsEnabled from dbo.something where ID = @ID if @@rowcount = 0 return 1 return
这是一个简单的选择。 如果找到0行,我的结果集将为null,但我仍然会有一个返回值。
这是一个不好的例子,因为这是一个选择,所以我确定我能找到是否返回了0行。 但是,在插入,删除或其他调用中,我们需要此返回值来了解是否存在问题。 我一直无法找到获得此返回值的方法。 我可以得到输出值,我可以得到结果集,但没有返回值。
如果我手动调用SQL,或者即使我使用entity framework运行SqlCommand
,我也可以获得返回值,但这不是我想要做的。
有没有人能够使用Entity Framework从存储过程中获取返回值?
谢谢您的帮助!
否。entity framework没有丰富的存储过程支持,因为它是一个ORM,而不是SQL替代品。
正如您已经发现的那样,如果您需要使用不太常见(更高级?)的存储过程function,则必须使用老式的ADO.NET。
我想对存储过程返回值的支持取决于Entity框架的版本。 虽然直接返回值对我不起作用,但我设法使用OUTPUT存储过程参数获取值。 例:
USE [YOUR_DB_NAME] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[TestReturnValue] @InputValue int = 0, @Result int OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @Result = @InputValue RETURN(@InputValue); END
这是测试代码:
void TestReturnValue() { using (var db = new YourDBContext()) { var result = new System.Data.Objects.ObjectParameter("Result", 0); Console.WriteLine("SP returned {0}", db.TestReturnValue(123, result)); Console.WriteLine("Output param {0}", result.Value); } }
这是输出:
SP returned -1 Output param 123
正如你看到的直接返回值输出一些垃圾但OUTPUT参数有效!
本文提供了有关从SP返回值的两种方法的一般信息
希望这可以帮助
我已经能够使用代码第一种方法获得Entity Framework 5的返回值(以及输出和输入参数)(但我认为它适用于版本4.x)。 从你的post我看不到你正在使用的EF版本以及你如何进行映射; 如果你考虑在这里使用代码优先方法,你可以找到我的post与解决方案:
从存储过程中获取返回值
您必须使用“Context.Database.SqlQuery”,并指定存储过程的输出类型
var spReturnVaue = Context.Database.SqlQuery("[schema].YourSp").FirstOrDefault(); int firstId = Context.Database.SqlQuery("[dbo].GetFirstId").FirstOrDefault();
为了在EF中获得感兴趣的结果,你应该返回一个相同的结构(不是1和Name,IsEnabled)在这个查询中,你应该在if条件中返回”,0而不是1:
上述就是C#学习教程:entity framework – 存储过程返回值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
选择 名称, 的IsEnabled 从 dbo.something 哪里 ID = @ID if @@ rowcount = 0 返回'',0
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003165.html