在Entity Framework Core 2.0中执行存储过程

9

有一个场景需要执行存储过程并在EF Core中读取返回的单个值。

我尝试使用以下代码,但它不起作用。我理解ExecuteSqlCommand不适用于select,只能用于更新数据库。

var test =  context.Database.ExecuteSqlCommand("SPName");

存储过程只有一个类似于 Select 'somevalue' 的查询语句。

寻找获取存储过程返回数据的替代方法。

4个回答

16

11

以下代码能够解决我的问题。这是基于下面回复中提供的建议。

using (var command = context.Database.GetDbConnection().CreateCommand())
    {
        command.CommandText = "StoredProcedureName";
        command.CommandType = CommandType.StoredProcedure;

        context.Database.OpenConnection();

        var dataReader = command.ExecuteReader();

        if (dataReader.Read())
        {
            string _test = dataReader.GetString(dataReader.GetOrdinal("ColumnName"));
        }
    }

1

4
FromSql只能用于实体,但在我的情况下没有实体来查询数据。数据库中有一个存储过程返回一个值。 - Pradeep H
https://msdn.microsoft.com/zh-cn/library/system.data.entity.database.executesqlcommand(v=vs.113).aspx 该方法的返回结果是Int32。 - nologo
如果您不使用实体,则不需要EF。快速搜索发现了这个视频。https://www.youtube.com/watch?v=bX3BPSbvofE - nologo
1
谢谢。我会去看一下的。但在基于 .Net Framework 的 EF 中执行 SP 很容易,我正在检查是否有类似的功能在 .Net Core 中。 - Pradeep H
1
视频链接帮助并解决了问题。谢谢。 - Pradeep H

0
请按照以下步骤操作:

步骤1:创建模型类

  public class SP_GetService
  {
        [Key]
        public int ServiceId { get; set; }
        public string ServiceAcronym { get; set; }
        public string ServiceDescription { get; set; }
    }

步骤2:在上下文文件中创建dbset

public virtual DbSet<SP_GetService> SP_GetServices { get; set; }

步骤3:执行过程

using (var _context = new SampleContext())
{
 var data = _context.SP_GetServices.FromSql("EXECUTE GetService @Param={0}", "value").ToList();
}

出现了这个错误:“DbSet<sp_SearchUsers>”不包含“FromSql”的定义,也没有可访问的扩展方法“FromSql”接受类型为“DbSet<sp_SearchUsers>”的第一个参数。我正在使用EF 5。 - Chris Rosete

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