我试图在Entity Framework中执行一个接收输入(字符串)和输出(ref_cursor)的存储过程:
public virtual List<UserCost> GET_USER_CUSTO(string p_ANOMES)
{
var p_ANOMESParameter = new OracleParameter("P_ANOMES", OracleDbType.Varchar2, p_ANOMES, ParameterDirection.Input);
var p_refCursor = new OracleParameter("USER_CUSTO", OracleDbType.RefCursor, ParameterDirection.Output);
return this.Database.SqlQuery<UserCost>(
"BEGIN TIM_FUNCTIONS.GET_TIM_USER_CUSTO(:P_ANOMES, :USER_CUSTO); end;", p_ANOMESParameter, p_refCursor).ToList();
}
但我一直得到这个例外:
ORA-03111:在通讯频道收到中断
我读到这可能是DB / dll版本的问题,但我已经对其他2个存储过程做了同样的事情,一切正常。所以我想情况并非如此。
这个问题在Oracle论坛上被提出了一些有用的回复,但没有解决方案: https://community.oracle.com/thread/3967933
答案 0 :(得分:1)
实际上我认为它与实体框架无关,可能与实体框架提供商无关,但它与Ado.Net提供商有关。
您可以开始尝试了解相同的存储过程是否在没有EF的情况下工作
我的意思是你可以使用ado.net运行存储过程,非常重要的是,读取所有数据(例如,Console.Writeline每列,或类似的东西是填充数据表,但在这种情况下,如果Oracle / Ado.Net提供商挂在你不会看到的特定记录上。)
答案 1 :(得分:0)
我遇到了同样的问题,但事实证明,我的网络不是实体框架的问题。引用一篇对我很有帮助的文章,他指示尝试4个步骤:
- 首先确保您的查询可以在您指定的超时内完成。如果您一直遇到此异常,请尝试增加超时。
- 这可能有助于摆脱异常,但不是根本原因。根本原因通常是未针对您正在执行的查询或网络不良进行优化的数据库。
- 要确定问题是否是数据库,请尝试在靠近网络的主机中执行相同的查询。或者尝试执行从不同网络访问数据库的相同查询。如果您确信数据库是问题所在,请尝试调整它。
- 要查找是否存在问题的网络,请尝试执行tcpdump并分析是否存在任何无序的数据包传送。或丢包。如果是,那么尝试修复网络。