【问题标题】:How to retrieve output parameter from stored procedure by EF code first如何首先通过EF代码从存储过程中检索输出参数
【发布时间】:2016-09-16 08:32:42
【问题描述】:

我是 EF 新手,首先使用 EF 代码。刚刚获得了一个链接https://code.msdn.microsoft.com/How-to-retrieve-output-e85526ba,它首先显示了如何使用 EF db 的读取输出类型参数。所以有人告诉我如何先通过 EF 代码从存储过程中检索输出参数?

如果可能的话,给我小示例代码或将我重定向到相关文章。

谢谢

我有办法

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;

【问题讨论】:

标签: c# entity-framework stored-procedures


【解决方案1】:

要检索存储过程调用的数据,可以使用以下方法

using(var db = new YourConext())
{
       var details = db.Database.SqlQuery<YourType>("exec YourProc @p", 
                      new SqlParameter("@p", YourValue));
}

YourType:可能是 int 或 string 或 long 甚至是 ComplexType

@p:如果存储过程有参数,你可以从参数中定义任意多个

如果您需要有关 SqlQuery 的更多信息,您可以查看以下内容

  1. Writing SQL queries for entities
  2. Entity Framework Code First and Stored Procedures

希望对你有帮助

【讨论】:

  • 这没有显示如何在输出参数中检索结果值。
  • 这不是回答问题
【解决方案2】:

这样我们也可以在不使用exec命令的情况下调用存储过程。

using (var context = new BloggingContext()) 
{ 
    var blogs = context.Blogs.SqlQuery("dbo.GetBlogs").ToList(); 
}

您还可以使用以下语法将参数传递给存储过程:

using (var context = new BloggingContext()) 
{ 
    var blogId = 1; 

    var blogs = context.Blogs.SqlQuery("dbo.GetBlogById @p0", blogId).Single(); 
}

【讨论】:

  • 问题是关于输出参数的。这并没有回答问题,它只是在谈论如何传递参数。
猜你喜欢
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
相关资源
最近更新 更多