实体框架中的调用存储过程

时间:2019-05-24 20:26:58

标签: c# entity-framework stored-procedures

我正在使用Entity Framework调用存储过程。存储过程如下:

ALTER PROCEDURE [dbo].[AdminContracts] 
    @StatusId INT
AS
BEGIN
    SET NOCOUNT ON;

    SELECT .. 

我的代码如下:

public virtual ObjectResult<AdminOrder> GetAdminOrders(int orderStatus)
{
    return ((IObjectContextAdapter) this).ObjectContext.ExecuteStoreQuery<AdminOrder>("AdminContracts", new SqlParameter("@StatusId", orderStatus));
}

从SO上的其他问题看来这是正确的

但是,它会导致异常:

  

过程或函数'AdminContracts'期望未提供参数'@StatusId'

对我很好,但显然我缺少一些东西

2 个答案:

答案 0 :(得分:1)

尝试以下代码:

public virtual ObjectResult<AdminOrder> GetAdminOrders(int orderStatus)
    {
        return ((IObjectContextAdapter) this).ObjectContext.ExecuteStoreQuery<AdminOrder>("EXEC AdminContracts @StatusId", new SqlParameter("StatusId", orderStatus));
    }

答案 1 :(得分:0)

end方法 直接针对返回一系列键入结果的数据源执行查询。 因此可以让用户运行T-SQL语句,您可以检查其documentation 因此您的代码将如下所示:

ExecuteStoreQuery<T>

但是如果您要调用存储的生产者或函数,则可以使用public virtual ObjectResult<AdminOrder> GetAdminOrders(int orderStatus) { return ((IObjectContextAdapter) this).ObjectContext.ExecuteStoreQuery<AdminOrder>("EXEC AdminContracts @StatusId", new SqlParameter("StatusId", orderStatus)); } 方法 使用指定的参数执行在数据源中定义并在概念模型中映射的存储过程或函数。返回一个类型化的ObjectResult。 您可以检查其documentation

因此您的代码如下:

ExecuteFunction<TElement>