【问题标题】:EF4.1 Code First: Stored Procedure with output parameterEF4.1 Code First:带输出参数的存储过程
【发布时间】:2011-11-18 09:31:21
【问题描述】:

我使用 Entity Framework 4.1 Code First。我想调用一个具有输出参数的存储过程,并检索该输出参数的值以及强类型结果集。它是一个带有这样签名的搜索功能

public IEnumerable<MyType> Search(int maxRows, out int totalRows, string searchTerm) { ... }

我发现了很多关于“函数导入”的提示,但这与 Code First 不兼容。 我可以使用 Database.SqlQuery(...) 调用存储过程,但这不适用于输出参数。

我可以使用 EF4.1 Code First 来解决这个问题吗?

【问题讨论】:

    标签: entity-framework stored-procedures parameters ef-code-first


    【解决方案1】:

    SqlQuery 与输出参数一起使用,但您必须正确定义 SQL 查询并设置 SqlParameters。尝试类似:

    var outParam = new SqlParameter();
    outParam.ParameterName = "TotalRows";
    outParam.SqlDbType = SqlDbType.Int;
    outParam.ParameterDirection = ParameterDirection.Output;
    
    var data = dbContext.Database.SqlQuery<MyType>("sp_search @SearchTerm, @MaxRows, @TotalRows OUT", 
                   new SqlParameter("SearchTerm", searchTerm), 
                   new SqlParameter("MaxRows", maxRows),
                   outParam);
    var result = data.ToList();
    totalRows = (int)outParam.Value;
    

    【讨论】:

    • 完美!缺少的部分是查询参数列表中的“ParameterDirection.Output”和“@totalRows”之后的“OUT”。谢谢!
    • 当您有多个 OUTPUT 参数时,这似乎不起作用。每个的值为空。使用多个 OUTPUT 参数执行此操作有什么运气吗?
    • 我的 sp 什么都不返回......那么在这种情况下应该怎么做......SqlQuery 不起作用......任何建议?
    • @AnilPurswani:在这种情况下,您需要使用ExecuteSqlCommand 而不是SqlQuery
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-01-25
    • 2011-09-06
    相关资源
    最近更新 更多