在.Net Core 2.1下,可以通过Dapper框架非常方便的使用Sql Server、MySQL、PostgreSQL等数据库,但是使用Oracle数据库就没那么方便了,比如执行存储过程的时候返回的游标,就没有对应的类型,另外还需要Oracle的驱动等等。
经过了几天的查阅资料,现在整理下在.Net Core 2.1下通过Dapper使用Oracle数据库的方法。
首先是连接数据库,方法与MySQL中的方法一样,见《在.Net Core 2.0中使用MySQL》,之后需要通过NuGet安装以下包:

  • Dapper

  • Dapper.Oracle

  • Oracle.ManagedDataAccess.Client

其中Oracle.ManagedDataAccess.Client是预发行版,需要勾选“包括预发行版”才能搜索到。
准备工作做好,下面是使用方法:
创建Oracle数据库链接:
var Conn = new OracleConnection(ConnString);

之后创建Oracle动态参数:
var parameters = new OracleDynamicParameters();

之后往动态参数中添加存储过程需要的参数:

parameters.Add("p_czlx", value: transfer.czlx);
parameters.Add("p_bzxx", value: transfer.bzxx);
parameters.Add("ResultStr", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Output);
parameters.Add("ResultCursor", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);

调用存储过程,得到返回的游标和出参:

var data = Conn.QueryFirstOrDefault<Models.UserMoney>("pkg_web.web_crj_gl", param: parameters, commandType: CommandType.StoredProcedure);
string res = parameters.Get<string>("ResultStr");   //出参

其中Models.UserMoney是游标对应的实体。
相对完整的代码:

using (var Conn = new OracleConnection(ConnString))
{
    var parameters = new OracleDynamicParameters();
    parameters.Add("p_czlx", value: transfer.czlx);
    parameters.Add("p_bzxx", value: transfer.bzxx);
    parameters.Add("ResultStr", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Output);
    parameters.Add("ResultCursor", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);

    var data = Conn.QueryFirstOrDefault<Models.UserMoney>("pkg_web.web_crj_gl", param: parameters, commandType: CommandType.StoredProcedure);
    string res = parameters.Get<string>("ResultStr");   //出参
    //对出参进行后续处理,省略

}

是不是很简单?
说下引用的这几个包的作用,Dapper就是ORM框架,Dapper.Oracle是针对Oracle重写的Dapper动态参数,Oracle.ManagedDataAccess.Client是Oracle官方提供的Oracle驱动,目前只有预发行版,还没有稳定版。
其实在第一次使用.Net Core+Oracle组合的时候,我也走了很多弯路,查到过好几篇博客提供的重写的OracleDynamicParameters方法,但是取出参的时候类型转换都有问题,本着能用现成的绝不自己手写的码畜精神,终于在gayhub(雾,github)上找到一条回复,提到了Dapper.Oracle,安装了之后果然好用。
希望这篇文章能帮到大家。

(完)