Управляемый драйвер ODP.Net - ORA-12704: несоответствие набора символов в сгенерированном коде
В настоящее время я использую управляемый драйвер Oracle (v12.1.2400) в качестве драйвера Entity Framework и в настоящее время вижуORA-12704: character set mismatch
ошибка во время исполнения.
Я использую следующий код LINQ-> SQL:
from c in CUSTOMER.AsNoTracking()
where c.ACCOUNT.Contains("DE")
&& c.DELETED == "N"
orderby (c.FORENAME + c.SURNAME)
select new { c.ACCOUNT, c.FORENAME, c.SURNAME})
и это создает следующий SQL:
SELECT "Project1"."C2" AS "C1",
"Project1"."ACCOUNT" AS "ACCOUNT",
"Project1"."FORENAME" AS "FORENAME",
"Project1"."SURNAME" AS "SURNAME"
FROM (
SELECT( (CASE WHEN ("Extent1"."FORENAME" IS NULL) THEN N''
ELSE "Extent1"."FORENAME" END)
||(CASE WHEN ("Extent1"."SURNAME" IS NULL) THEN N''
ELSE "Extent1"."SURNAME" END)) AS "C1",
"Extent1"."ACCOUNT" AS "ACCOUNT",
"Extent1"."FORENAME" AS "FORENAME",
"Extent1"."SURNAME" AS "SURNAME",
1 AS "C2"
FROM "TEST"."CUSTOMER" "Extent1"
WHERE (("Extent1"."ACCOUNT" LIKE '%DE%')
AND ('N' = "Extent1"."DELETED"))) "Project1"
ORDER BY "Project1"."C1" ASC;
Когда я отлаживаю этот SQL, я вижу проблему в том, что SQL используетN''
вCASE
разделы. КАК столбцы не являются юникодом, если я уберу предыдущиеN
оставить просто''
тогда sql работает как положено.
Можно ли как-то предотвратить это по умолчанию?
Все столбцы БД в настоящее времяVARCHAR
и моделируются в C # какstring
.
Сначала сопоставьте код для двух столбцов:
this.Property(t => t.FORENAME).HasColumnName("FORENAME").IsUnicode(false).HasMaxLength(35);
this.Property(t => t.SURNAME).HasColumnName("SURNAME").IsUnicode(false).HasMaxLength(35);
Я ожидал, чтоIsUnicode(false)
заявление позаботится об этом.
К вашему сведению, это работало, когда я использовал EF5 и неуправляемый драйвер.
Кроме того, драйверы Devart dotConnectForOracle не имеют этой проблемы, поэтому я думаю, что это ошибка в драйверах Oracle.