Я тестирую Entity Framework 6.2 с базой данных Oracle, но сталкиваюсь с проблемами при попытке объединить несколько условий с преобразованием.
Мне нужно сопоставить TABLE2_ID (NUMBER)
с TABLE2.ID (VARCHAR2)
, которые представляют собой различные типы значений.
Проблема в том, что метод ToString()
переводится в TO_NCLOB
вместо TO_NCHAR
, что сработает.
var query = from table1 in context.TABLE1
join table2 in context.TABLE2 on table1.TABLE2_ID.ToString() equals table2.ID
select new
{
table1.NAME,
table2.TEXT
};
Сгенерированный SQL выглядит следующим образом:
SELECT
1 AS "C1",
"Extent1"."NAME" AS "NAME",
"Extent2"."TEXT" AS "TEXT"
FROM "USER"."TABLE1" "Extent1"
INNER JOIN "USER"."TABLE2" "Extent2" ON
(CASE WHEN ("Extent1"."TABLE2_ID" IS NULL) THEN N''
// At this point I need TO_NCHAR
ELSE TO_NCLOB("Extent1"."TABLE2_ID") END) = "Extent2"."ID"
В результате:
ORA-00932: несовместимые типы данных: ожидаемый NCHAR получил NCLOB
Я знаю, что есть много вопросов с почти одним и тем же исключением, но только с разными вариантами использования, поэтому, пожалуйста, посмотрите, как я могу решить эту проблему.
Например, Есть ли способ переопределить ToString()
перевод SQL?
ОСНОВНАЯ ПРОБЛЕМА: LINQ to SQL .ToString()
преобразуется в TO_NCLOB
, но мне нужно TO_NCHAR
или другое решение.
Я использую Visual Studio 2017 с Oracle Developer Tools для VS2017 12.2.0.11