ORA-03111 ошибка в Entity Framework

3

Я пытаюсь выполнить хранимую процедуру в 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, но я уже сделал то же самое с двумя другими хранимыми процедурами, и все работает нормально. Поэтому я думаю, что это не так.

Этот вопрос был задан на форуме Oracle с некоторыми полезными ответами, но без решения: https://community.oracle.com/thread/3967933

  • 0
    Как я уже упоминал, мне удалось без проблем выполнить и извлечь данные из других хранимых процедур. И версия БД 11,2
  • 0
    Вы получаете ошибку сразу или только через минуту или около того?
Показать ещё 4 комментария
Теги:
entity-framework

2 ответа

1
Лучший ответ

На самом деле я думаю, что он не связан с инфраструктурой сущности и, вероятно, не связан с провайдером инфраструктуры сущностей, но связан с провайдером Ado.Net.
Вы можете начать пытаться понять, работает ли одна и та же хранимая процедура без EF.
Я имею в виду, что вы можете запускать хранимую процедуру с помощью ado.net и, что очень важно, читать все данные (например, Console.Writeline каждый столбец или, похоже, заполнять данные, но в этом случае, если поставщик Oracle/Ado.Net зависает на определенной записи, вы ее не увидите).

0

У меня была та же проблема, с которой вы столкнулись, и мне кажется, что проблема связана с моей сетью не с инфраструктурой сущности. Высказывая статью, которая мне очень помогла, он попросил выполнить 4 шага:

  • Сначала убедитесь, что ваш запрос может быть выполнен в течение указанного вами таймаута. Если вы постоянно сталкиваетесь с этим исключением, попробуйте увеличить время ожидания.
  • Это может помочь избавиться от исключения, но не от основной причины. Основной причиной обычно является база данных, которая не оптимизирована для выполняемого запроса или плохой сети.
  • Чтобы узнать, является ли проблема с базой данных, попробуйте выполнить тот же запрос на узле, который ближе к сети. Или попробуйте выполнить тот же запрос, который попадает в базу данных из другой сети. Если вы уверены, что проблема с базой данных, попробуйте настроить ее.
  • Чтобы узнать, есть ли у этой сети проблема, попробуйте сделать tcpdump и проанализировать, есть ли какой-либо порядок доставки пакетов. Или упали пакеты. Если да, попробуйте исправить сеть.

Источник здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню