繁体   English   中英

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

[英]Call Stored Procedure In Entity Framework

我正在使用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”(未提供)

对我来说还不错,但显然我缺少了一些东西

试试这个代码:

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

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

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

但是,如果要调用存储的生产者或函数,则可以使用ExecuteFunction<TElement>方法使用指定的参数执行在数据源中定义并在概念模型中映射的存储过程或函数。 返回一个类型化的ObjectResult。 您可以查看其文档

因此您的代码将如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM