如何在Entity Framework中运行存储过程。

3

我在数据库中有一个查询,通过Ajax使用Json响应返回另一个查询。我已经创建了一个存储过程,接受该查询并返回多个列。

我不知道如何在实体框架中运行存储过程。

需要帮助。

方法:-

public ActionResult DropDownn(string query)
    {
        using (DynamicDBEntities db = new DynamicDBEntities())
        {
            //var dbQuery = db.Database.SqlQuery<Cust_mas>(query).ToList();
            //return Json(courseList, JsonRequestBehavior.AllowGet);
        }
    }

SP:-
修改存储过程[dbo].[SP_DynamicCtrl]。

@query nvarchar(1000) 
As
begin
execute sp_executesql @query;
end

尝试这个:http://www.entityframeworktutorial.net/stored-procedure-in-entity-framework.aspx - Daniel Tshuva
3
可能是在Entity Framework中使用存储过程的重复问题。 - Stephen Byrne
@DanielTshuva,它正在使用我不想使用的模型。我直接想以JSON格式返回数据并在表格中打印出来。 - user8051700
你的存储过程返回一个 JSON 吗? - Daniel Tshuva
@DanielTshuva ??? - user8051700
显示剩余3条评论
2个回答

7
根据我的理解,您想要执行一个运行在多个表上的存储过程,并将 Json 数据返回到视图。您可以尝试以下方法: 方法1:(使用 ExecuteSqlCommand)
SqlParameter param1 = new SqlParameter("@query", query);        
var result = db.Database.ExecuteSqlCommand("SP_DynamicCtrl @query", 
                              param1);

方法二:(使用SqlQuery的对象类型)

SqlParameter param1 = new SqlParameter("@query", query);
Var result = db.Database.SqlQuery<Object>("exec SP_DynamicCtrl @query", param1);

方法三:(更简单的方法)

1.) 根据存储过程的返回参数创建一个模型,我们称之为YourType 类。 2.) 使用以下代码来调用存储过程:

SqlParameter param1 = new SqlParameter("@query", query);
Var result = db.Database.SqlQuery<YourType>("exec SP_DynamicCtrl @query", param1);

在从上面的查询中获取结果之后,您可以在控制器中将其转换为JSON再返回:
return Json(result, JsonRequestBehavior.AllowGet); //Typecast the result as per your need

请根据您的需求修改代码。

我能否将我的查询参数传递到SqlQuery()方法中……因为我的存储过程接受该参数并执行它。同时也显示错误。 - user8051700
在我上面展示的例子中,@query是存储过程的参数。在使用上述代码后,您遇到了什么错误? - Saket Kumar
它不接受函数...未知的“函数”。 - user8051700
@sandeepgupta:我已经更新了答案。请查看并验证。 - Saket Kumar
1
  1. 显示结果 = -1
  2. 显示:- SqlParameter 已经包含在另一个 SqlParameterCollection 中。
  3. 我不想使用模型,我直接想使用 JSON 结果生成表格。
- user8051700

0
如果您已经在EDMX中映射了它,请尝试这个。
 public ActionResult DropDownn(string query)
    {
        using (DynamicDBEntities db = new DynamicDBEntities())
        {

       var result = context.SP_DynamicCtrl(query);
        return result.FirstOrDefault();
        }
    }

存储数据提供程序返回的数据读取器没有足够的列来满足所请求的查询。 - user8051700
它在 "var result = context.SP_DynamicCtrl(query);" 中显示错误。 System.InvalidOperationException:“从实例化的 'System.Int64' 类型到 'System.String' 类型的指定转换无效。” - user8051700
尝试使用公共静态字符串。 - Kewin Björk Nielsen
结果返回转换问题 - user8051700

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接