【问题标题】:Execute stored function returning primitive in postgresql using entity framework core使用实体框架核心在postgresql中执行存储函数返回原语
【发布时间】:2017-12-15 13:51:56
【问题描述】:

我有一个在 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 类型,我不知道如何得到我需要的结果。

【问题讨论】:

    标签: postgresql .net-core stored-procedures npgsql


    【解决方案1】:

    所以我得到它的工作。这是代码。

    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 而不是函数名。

    【讨论】:

      猜你喜欢
      • 2020-09-12
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多