有一个场景需要执行存储过程并在EF Core中读取返回的单个值。
我尝试使用以下代码,但它不起作用。我理解ExecuteSqlCommand
不适用于select,只能用于更新数据库。
var test = context.Database.ExecuteSqlCommand("SPName");
存储过程只有一个类似于 Select 'somevalue'
的查询语句。
寻找获取存储过程返回数据的替代方法。
有一个场景需要执行存储过程并在EF Core中读取返回的单个值。
我尝试使用以下代码,但它不起作用。我理解ExecuteSqlCommand
不适用于select,只能用于更新数据库。
var test = context.Database.ExecuteSqlCommand("SPName");
存储过程只有一个类似于 Select 'somevalue'
的查询语句。
寻找获取存储过程返回数据的替代方法。
DbCommand cmd = ctx.Database.GetDbConnection().CreateCommand();
cmd.CommandText = "SPName";
cmd.CommandType = CommandType.StoredProcedure;
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
return await cmd.ExecuteNonQueryAsync();
以下代码能够解决我的问题。这是基于下面回复中提供的建议。
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"));
}
}
请查看微软的文档:https://learn.microsoft.com/zh-cn/ef/core/querying/raw-sql。
var blog = context.Blogs
.FromSql("EXECUTE dbo.GetMostPopularBlogs")
.SingleOrDefault();
步骤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();
}