Controlador gestionado ODP.Net - ORA-12704: el juego de caracteres no coincide en el código generado
Actualmente estoy usando el Controlador administrado de Oracle (v12.1.2400) como mi controlador de Entity Framework, y actualmente estoy viendo unORA-12704: character set mismatch
error durante la ejecución
El código LINQ-> SQL que estoy usando es el siguiente:
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})
y esto está creando el siguiente 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;
Cuando depuro ese SQL, puedo ver que el problema es que el SQL está usandoN''
en elCASE
secciones. AS las columnas no son unicode, si elimino el precedenteN
dejar solo''
entonces el sql funciona como se esperaba.
¿Hay alguna manera de evitar este incumplimiento?
Todas las columnas db son actualmenteVARCHAR
y se modelan en C # comostring
.
Las primeras asignaciones de código para las dos columnas son las siguientes:
this.Property(t => t.FORENAME).HasColumnName("FORENAME").IsUnicode(false).HasMaxLength(35);
this.Property(t => t.SURNAME).HasColumnName("SURNAME").IsUnicode(false).HasMaxLength(35);
Esperaba que elIsUnicode(false)
declaración se encargaría de esto.
Para su información, esto solía funcionar cuando usaba EF5 y el controlador no administrado.
Además, los controladores Devart dotConnectForOracle no tienen este problema, por lo que creo que esto es un error en los controladores de Oracle.