【发布时间】:2023-04-08 12:36:01
【问题描述】:
我想调用一个简单的存储过程,它有 2 个输出参数,一个 int 和一个字符串。我想使用我的通用存储库模式来获取数据。
这里是 Oracle 存储过程:
create or replace procedure dummy_proc (
dummy1 in number,
dummy2 in varchar2,
dummy3 out number,
dummy4 out varchar2)
is
begin
dummy3 := 2500 + dummy1;
dummy4 := 'Sample text! -> ' || dummy2;
end dummy_proc;
我的通用存储库方法:
public DbRawSqlQuery<T> SQLQuery<T>(string sql, params object[] parameters)
{
return Context.Database.SqlQuery<T>(sql, parameters);
}
我创建了一个简单的类来保存 2 个输出参数值:
public class Test
{
public int dummy1 { get; set; }
public string dummy2 { get; set; }
}
这是我将用来调用存储库方法的管理器类:
var dummy1 = new OracleParameter("dummy1", OracleDbType.Int32,50, ParameterDirection.Input) { Value = id };
dummy1.Size = 50;
var dummy2 = new OracleParameter("dummy2", OracleDbType.Varchar2,200, ParameterDirection.Input) { Value = model };
dummy2.Size = 200;
var dummy3 = new OracleParameter("dummy3", OracleDbType.Int32,50, ParameterDirection.Output) ;
dummy3.Size = 50;
var dummy4 = new OracleParameter("dummy4", OracleDbType.Varchar2, 200, ParameterDirection.Output) ;
dummy4.Size = 200;
object[] parameters = new object[] { dummy1,dummy2,dummy3,dummy4 };
var test = _repository.SQLQuery<Test>("BEGIN dummy_proc(:dummy1, :dummy2, :dummy3, :dummy4); END;", parameters);
var param3 = dummy3.Value;
var param4 = dummy4.Value;
这段代码似乎正确调用了存储过程,但我的输出参数始终为空。我搜索了几篇文章,但没有一篇使用与我发现的相同的模式。
【问题讨论】:
标签: oracle entity-framework stored-procedures model-view-controller repository-pattern