Entity Framework 6 на базе данных Oracle, выдающий ошибки при простых запросах - PullRequest
0 голосов
/ 11 апреля 2019

Наша команда разрабатывает приложение ASP.NET Core MVC с использованием Entity Framework 6 и базы данных Oracle.Из-за Oracle DB мы используем полную Entity Framework вместо EF Core (Oracle еще не выпустил Core EF провайдера) и запускаем наш проект .NET Core внутри полной .NET.Мы используем подход «Сначала база данных» и генерируем нашу локальную модель БД из схемы БД, и обновляем ее снова при любом изменении БД.

Таким образом, мы использовали EF в основном счастливо в течение всего проекта.

Недавно мы были вынуждены перейти на новый сервер БД.Он работает с точно такой же схемой, версией БД, ОС и всем остальным, но мы заметили некоторые странные проблемы с запуском операторов SELECT, которые хорошо работали для нас в прошлом.

Например, скажем, EF генерирует следующий запрос:

SELECT * FROM CODE_TABLE WHERE CODE = 'ABC';

Это будет работать.Если мы выполним тот же запрос, передав другой параметр, он завершится ошибкой:

SELECT * FROM CODE_TABLE WHERE CODE = 'DEF';

Возвращаемые ошибки:

ORA-02002: error while writing to audit trail
ORA-22922: nonexistent LOB value

В некоторых случаях мы обнаружили, что перезаписькод вокруг кажется, что запрос Linq это исправляет.Изменено:

var userRoleCode = _unitOfWork.Users.Find(u => u.EmployeeId == username.ToUpper() || u.EmployeeId == email.ToUpper()).FirstOrDefault().RoleCode;

на:

username = username.ToUpper();
email = email.ToUpper();
var userRoleCode = _unitOfWork.Users.Find(u => u.EmployeeId == username || u.EmployeeId == email).FirstOrDefault().RoleCode;

В другом случае сохранение запроса Linq в предикат и передача его в исправленной проблеме.Запросы SELECT, напечатанные в VS Output, идентичны во всех этих случаях, но каким-то образом они работают волшебным образом, когда мы немного корректируем код.

Единственные вещи, которые мы можем найти в Интернете относительно этих ошибок ORA, включают проверку табличного пространства инаши администраторы утверждают, что осталось достаточно табличного пространства.

  • Есть ли что-то, что мы делаем неправильно в том, как мы используем EF или пишем наши запросы Linq?Он работал на одной БД, а не на другой.
  • Есть ли в EF какой-то локальный кеш вне папки проекта VS, который необходимо очистить?У кого-нибудь есть идеи, почему это может происходить?

Редактировать: Для ясности, наш .Find() метод, упомянутый выше, просто:

public IList<TEntity> Find(Expression<Func<TEntity, bool>> predicate) => Context.Set<TEntity>().Where(predicate).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...