2017-12-15 3 views
0

나는 PostgreSQL에서 실행되는 프로젝트를 가졌습니다. Entity 프레임 워크를 사용하여 값을 반환하는 저장 프로 시저를 실행했습니다 (long).엔티티 프레임 워크 코어를 사용하여 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 유형이며 필요한 결과를 얻는 방법을 모르겠습니다.

답변

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; 
     } 

내 문제는 내가 함수 이름 대신 command.CommandText에 "bs_p_get_host_seqno SELECT * FROM"넣어이었다.

관련 문제