在 Entity Framework Core 2.0 中执行存储过程
Executing Stored Procedure in Entity Framework Core 2.0
有一个场景来执行存储过程并读取 EF Core 中的 return 值,return 是一个值。
我尝试使用此代码,但这不起作用。我知道 ExecuteSqlCommand
不适用于 select,只能用于更新数据库。
var test = context.Database.ExecuteSqlCommand("SPName");
存储过程只有一个 select 语句,如 Select 'somevalue'
正在寻找任何替代方法来获取存储过程 returns.
的数据
查看 MS 的文档:https://docs.microsoft.com/en-us/ef/core/querying/raw-sql
var blog = context.Blogs
.FromSql("EXECUTE dbo.GetMostPopularBlogs")
.SingleOrDefault();
他们有一个 git 充满示例的回购协议:https://github.com/aspnet/EntityFramework.Docs/blob/master/samples/core/Querying/Querying/RawSQL/Sample.cs
要在 EF Core 中使用存储过程,请观看此视频:https://www.youtube.com/watch?v=bX3BPSbvofE
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"));
}
}
请按照以下步骤操作:
步骤 1: 创建模型 class
public class SP_GetService
{
[Key]
public int ServiceId { get; set; }
public string ServiceAcronym { get; set; }
public string ServiceDescription { get; set; }
}
步骤 2: 在上下文文件中创建数据库集
public virtual DbSet<SP_GetService> SP_GetServices { get; set; }
Step3 : 执行程序
using (var _context = new SampleContext())
{
var data = _context.SP_GetServices.FromSql("EXECUTE GetService @Param={0}", "value").ToList();
}
有一个场景来执行存储过程并读取 EF Core 中的 return 值,return 是一个值。
我尝试使用此代码,但这不起作用。我知道 ExecuteSqlCommand
不适用于 select,只能用于更新数据库。
var test = context.Database.ExecuteSqlCommand("SPName");
存储过程只有一个 select 语句,如 Select 'somevalue'
正在寻找任何替代方法来获取存储过程 returns.
的数据查看 MS 的文档:https://docs.microsoft.com/en-us/ef/core/querying/raw-sql
var blog = context.Blogs
.FromSql("EXECUTE dbo.GetMostPopularBlogs")
.SingleOrDefault();
他们有一个 git 充满示例的回购协议:https://github.com/aspnet/EntityFramework.Docs/blob/master/samples/core/Querying/Querying/RawSQL/Sample.cs
要在 EF Core 中使用存储过程,请观看此视频:https://www.youtube.com/watch?v=bX3BPSbvofE
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"));
}
}
请按照以下步骤操作:
步骤 1: 创建模型 class
public class SP_GetService
{
[Key]
public int ServiceId { get; set; }
public string ServiceAcronym { get; set; }
public string ServiceDescription { get; set; }
}
步骤 2: 在上下文文件中创建数据库集
public virtual DbSet<SP_GetService> SP_GetServices { get; set; }
Step3 : 执行程序
using (var _context = new SampleContext())
{
var data = _context.SP_GetServices.FromSql("EXECUTE GetService @Param={0}", "value").ToList();
}