【问题标题】:Get @Return_Value from stored procedure using Entity使用实体从存储过程中获取@Return_Value
【发布时间】:2011-01-25 09:20:22
【问题描述】:

我想使用实体从存储过程中获取@Return_Value

假设存储过程是:

CREATE PROCEDURE GetEmployes( @whereSql nvarchar(512) )
AS
BEGIN
    set @tsql = 'select * from Employes where '  + @whereSql
    exec(@tsql)
    return 5
END

实体导入为

ObjectResult<Employe> GetEmployes(...)

这就是我需要的。

int return_value;
var result = db.GetEmpleys("name = .. AND ...", out return_value);
if (return_value == 5)
     // do something on this exit code
List<Employe> result.ToList<Employe>() ;

我正在使用 Visual Studio 2008

TIA

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    int 返回值的概念是特定于 SQL Server 的。我不相信设计为与 DB-server-agnostic 无关的 EF 支持它。

    所以你必须使用正确的输出参数,而不是 int 返回值。那应该不是问题。最坏的情况,将 proc 包装在另一个 proc 中,该 proc 返回第一个的 int 返回值作为第二个的输出。

    最后,我希望这只是一个示例,因为您的演示过程引入了 SQL 注入漏洞。

    【讨论】:

    • 做到了。我想知道替代品。关于sql注入,这只是一个示例。此外,您的提议并非没有问题。我使用带有 DbCommand 的部分实体类自己添加了该过程。问题是 - 实体根本不支持返回值,如果 RETURN 是存储过程的最后一条语句(它必须是 Select),那么 DbCommand 会抛出错误。然后,部分类中的代码可以影响其他实体代码。总而言之,问题不在于解决方法。在阅读之后,我猜想第一版 Entity 的灵活性和特性会导致问题。
    • 即使 EF 4 也不支持返回值 AFAIK,尽管它确实支持复杂类型并且对标量输出有很多更好的支持。
    • 标量输出是一种方法。由于 RETURN 语句可能有问题,我使用当前标志来确定将为整数输出哪种类型的返回过程 - 选择或返回。
    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多