Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Entity Framework ORA-00932: inconsistent datatypes: “'expected CLOB got CHAR”

#c_sharp #oracle #entity_framework #expressions


Для доступа к БД Oracle из MVC ASP.Net приложения используется библиотека Oracle.ManagedDataAccess.EntityFramework
6.122.1.0 (это самая свежая версия библиотеки из NuGet на 14 ноября 2017)

protected override Expression> getSelector()
{   
    return m => new
    {
        ID = m.ID,
        NAME = m.Name,
        LONGSTRING = "Bla-bla-bla-bla...some thousands characters..." + 
                      m.ID + "bla-bla...bla" 
    };
}

protected override ProblemMethod()
{
    var result = db.MyEntity.Select(getSelector()).ToList();
}


Проблема заключается в том, что в LONGSTRING собирается очень длинная строка (тысячи
символов), и вызов Select выбрасывает исключение


  ORA-00932: inconsistent datatypes: "'expected CLOB got CHAR"


Так уж строиться архитектура, что мне нужно получить именно Expression для вызова
некоторых более сложных Select-ов в моём классе.
Как побороть или обойти проблему? Как вариант обхода проблемы, можно заставить EF
выполнить Select не в СУБД, а на клиенте. Но как это сделать?

PS: Этот же вопрос на английском.

Update

Уместно было привести структуру MyEntity 

 CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));

    


Ответы

Ответ 1



Перевод https://stackoverflow.com/a/47226720/5574962 Если вы хотите выполнить Select на клиенте (т.е. загрузить все MyEntity и фильтровать затем на клиенте) var result = db.MyEntity.ToList().AsQueryable().Select(getSelector()).ToList(); Первый ToList() загрузит все сущности из базы данных. AsQueryable() позволит использовать Expression, в последующих методах.

Ответ 2



Это известная проблема при работе с LOB'ами в EF. Ходят слухи, что она исправлена в последней версии Oracle.ManagedDataAccess.dll. Можешь обновить и попробовать. Также ты можешь вручную поправить код, заменив обращение к полю из выборки на явный вызов GetOracleClob.

Комментариев нет:

Отправить комментарий