[英]C# Entity Framework using PostgreSQL, NPGSQL and stored procedures returning a table result parameter errors
[英]Execute stored function returning primitive in postgresql using entity framework core
我有一个在 Postgresql 上运行的项目。 我使用实体框架来执行将返回一些值(长)的存储过程。
public override long GetHostSequenceNumber(byte hostId, byte srvId)
{
var hId = new Npgsql.NpgsqlParameter("@host_id", hostId);
var sId = new Npgsql.NpgsqlParameter("@srv_id", srvId);
var res = this.Database.SqlQuery<long>("select * from dbo.bs_p_get_host_seqno( @host_id,@srv_id)", hId, sId).SingleOrDefault();
return res;
}
简而言之,假设此过程在某些表中搜索某些特定值。
它工作得很好。 但是现在我切换到 Core 2.0,我找不到做同样事情的方法。 我读过一些文章,他们说要使用 FromSql,但我不能使用它,因为我没有要添加到 DbContext 的任何实体。 我也尝试使用 ADO 并执行 SQL 命令,但我总是在结果中得到 -1。
public override long GetHostSequenceNumber(byte hostId, byte srvId)
{
var hId = new Npgsql.NpgsqlParameter("@host_id", hostId);
var sId = new Npgsql.NpgsqlParameter("@srv_id", srvId);
var res = this.Database.ExecuteSqlCommand("select * from bs_p_get_host_seqno(@host_id,@srv_id)", hId,sId);
return res;
}
但是 ExecuteSqlCommand 也总是返回 -1 并且它是 int 类型,我不知道如何获得我需要的结果。
所以我得到它的工作。 这是代码。
using (var command = this.Database.GetDbConnection().CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "bs_p_get_host_seqno";
command.Parameters.Add(new Npgsql.NpgsqlParameter("host_id", NpgsqlTypes.NpgsqlDbType.Smallint)
{ Value = hostId });
command.Parameters.Add(new Npgsql.NpgsqlParameter("srv_id", NpgsqlTypes.NpgsqlDbType.Smallint)
{ Value = srvId });
if (command.Connection.State == ConnectionState.Closed)
command.Connection.Open();
var res = (long)command.ExecuteScalar();
return res;
}
我的问题是我把“select * from bs_p_get_host_seqno”放到 command.CommandText 而不是函数名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.