Driver gerenciado ODP.Net - ORA-12704: incompatibilidade de conjunto de caracteres no código gerado
Atualmente, estou usando o Oracle Managed Driver (v12.1.2400) como meu driver do Entity Framework e atualmente estou vendo umORA-12704: character set mismatch
erro durante a execução.
O código LINQ-> SQL que estou usando é o seguinte:
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})
e isso está criando o seguinte 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;
Quando depuro esse SQL, percebo que o problema está no SQL.N''
noCASE
Seções. COMO as colunas não são unicode, se eu remover o anteriorN
deixar apenas''
então o sql funciona como esperado.
Existe alguma maneira de impedir que isso ocorra?
Todas as colunas db estão atualmenteVARCHAR
e são modelados em C # comostring
.
Os primeiros mapeamentos de código para as duas colunas são os seguintes:
this.Property(t => t.FORENAME).HasColumnName("FORENAME").IsUnicode(false).HasMaxLength(35);
this.Property(t => t.SURNAME).HasColumnName("SURNAME").IsUnicode(false).HasMaxLength(35);
Eu estava esperando que oIsUnicode(false)
declaração iria cuidar disso.
Para sua informação, isso costumava funcionar quando eu usava o EF5 e o driver não gerenciado.
Além disso, os drivers Devart dotConnectForOracle não têm esse problema, por isso estou pensando que isso seja um bug nos drivers Oracle.