ASP.NET Core - 找不到类型或命名空间名称“OracleDynamicParameters”

问题描述 投票:0回答:1

在带有 Dapper 和 Oracle 数据库的 ASP.NET Core-6 中,我有一个要使用的存储过程。

我有这些 Nuget 包

Dapper 版本-2.0.123"

Oracle.ManagedDataAccess.Core”版本 3.21.100

但是,我收到了这个错误:

Severity    Code    Description    Project    File    Line    Suppression State
Error    CS0246    The type or namespace name 'OracleDynamicParameters' could not be found (are you missing a using directive or an assembly reference?) 

获取学生详细信息:

create or replace PROCEDURE  "GET_STUDENT_DETAILS" (
        sUserID     IN VARCHAR DEFAULT NULL,
        rResultSet  OUT SYS_REFCURSOR
        )
AS
nCheck        NUMBER;
sUserIDC      VARCHAR(100);

BEGIN
    select instr(sUserID,'.') into nCheck from dual;

IF nCheck>0 THEN 

    SELECT CONCAT(sUserID,'@rotrim.com') into sUserIDC FROM DUAL;
    
    OPEN rResultSet FOR   
    SELECT SU."USER_ID",
          SU."USER_NAME",
          SU."FIRST_NAME",
          SU."LAST_NAME",
        CFUF."EMAIL"
      FROM PEPUSC.smtb_user su, PEPUSC.cstm_function_userdef_fields cfuf
      WHERE su."USER_ID"||'~'=cfuf."REC_KEY"
      AND cfuf."FUNCTION_ID"= 'SMDUSRDF'
      AND  SU. USER_NAME = sUserIDC
      AND SU.USER_STATUS = 'E';
      
ELSE 

OPEN rResultSet FOR
    SELECT SU."USER_ID",
          SU."USER_NAME",
          SU."FIRST_NAME",
          SU."LAST_NAME",
        CFUF."EMAIL"
      FROM PEPUSC.smtb_user su, PEPUSC.cstm_function_userdef_fields cfuf
      WHERE su."USER_ID"||'~'=cfuf."REC_KEY"
      AND cfuf."FUNCTION_ID"= 'SMDUSRDF'
      AND SU.USER_ID = sUserID
      AND SU.USER_STATUS = 'E';
END IF;
END;

主要代码:

using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
using Dapper;

public class StudentRepository : IStudentRepository
{
    private readonly IMapper _mapper;
    private readonly IConfiguration _configuration;
    private readonly ILogger<StudentRepository> _logger;
    public StudentRepository(
        IMapper mapper,
        ILogger<StudentRepository> logger,
        IConfiguration configuration
        )
    {
        _mapper = mapper;
        _logger = logger;
        _configuration = configuration;
    }
    public IDbConnection Connection
    {
        get { return new OracleConnection(_configuration.GetConnectionString("DefaultConnection")); }
    }
    public async Task<Response<StudentResponseDto>> GetStudentByUserIdAsync(string sUserID)
    {
        var response = new Response<StudentResponseDto>();
        try
        {
            using (IDbConnection _dbConnection = Connection)
            {
                _dbConnection.Open();
                //
                var parameters = new OracleDynamicParameters();
                parameters.Add("sUserID", sUserID, OracleDbType.Varchar2, ParameterDirection.Input);
                parameters.Add("rResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                string query = "GET_STUDENT_DETAILS";
                var student = await _dbConnection.QueryFirstOrDefaultAsync<StudentResponse>(query, parameters, commandType: CommandType.StoredProcedure);
                if (fcubsHeader != null)
                {
                    var studentDtos = _mapper.Map<StudentResponseDto>(fcubsHeader);
                    response.Successful = true;
                    response.Data = studentDtos;
                    response.StatusCode = (int)HttpStatusCode.OK;
                    return response;
                }
                else
                {
                    response.Message = $"Data Not Found!";
                    response.Successful = true;
                    response.StatusCode = (int)HttpStatusCode.NoContent;
                    return response;
                }
            }
        }
        catch (OracleException ex)
        {
            response.Successful = false;
            response.StatusCode = (int)HttpStatusCode.BadRequest;
            return response;
            throw;
        }
        catch (Exception ex)
        {
            response.Successful = false;
            response.StatusCode = (int)HttpStatusCode.BadRequest;
            return response;
            throw;
        }
    }
}

如何解决这个问题?

c# oracle asp.net-core dapper
1个回答
0
投票

Dapper
Oracle的实现来看,OracleDynamicParameters都不存在。

但是,从一些研究来看,有一个开发人员实现了这个

OracleDynamicParameters
来用Dapper查询Oracle存储过程。您可能已经阅读过这篇文章:使用 Dapper (C#) 调用 Oracle Store 过程并实现它。

如果您正在寻找纯粹的 Dapper 解决方案,则需要迁移代码:

  1. OracleDynamicParameters
    迁移到
    DynamicParameters
  2. OracleDbType
    迁移到
    DbType

来自

OracleDbType
文档

OracleDbType
属性和
DbType
属性是链接的。因此,设置
OracleDbType
属性会将
DbType
属性更改为支持
DbType

您可以参考从OracleDbType推断DbType,作为将

OracleDbType
切换到
DbType
的参考。

using System.Data;
var parameters = new DynamicParameters();
parameters.Add("sUserID", sUserID, dbType: DbType.String, direction: ParameterDirection.Input);
parameters.Add("rResultSet", null, dbType: DbType.Object, direction: ParameterDirection.Output);
© www.soinside.com 2019 - 2024. All rights reserved.