ODP.Net Managed Driver - ORA-12704: Zeichensatz stimmt im generierten Code nicht überein
Ich verwende derzeit den Oracle Managed Driver (v12.1.2400) als meinen Entity Framework-Treiber und sehe derzeit einORA-12704: character set mismatch
Fehler während der Ausführung.
Der von mir verwendete LINQ-> SQL-Code lautet wie folgt:
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})
und dies erstellt die folgende 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;
Wenn ich dieses SQL debugge, sehe ich, dass das SQL @ verwendeN''
in demCASE
Abschnitte. AS die Spalten sind nicht Unicode, wenn ich das vorhergehende @ entferN
nur @ verlass''
dann funktioniert der sql wie erwartet.
Gibt es eine Möglichkeit, diese Standardeinstellung zu verhindern?
Alle DB-Spalten sind derzeitVARCHAR
und werden in C # als @ modelliestring
.
ie ersten Zuordnungen von @Code für die beiden Spalten lauten wie folgt:
this.Property(t => t.FORENAME).HasColumnName("FORENAME").IsUnicode(false).HasMaxLength(35);
this.Property(t => t.SURNAME).HasColumnName("SURNAME").IsUnicode(false).HasMaxLength(35);
Ich habe erwartet, dass dieIsUnicode(false)
ie @ -Anweisung würde sich darum kümmern.
FYI, das hat funktioniert, als ich EF5 und den nicht verwalteten Treiber verwendet habe.
Außerdem haben die Devart dotConnectForOracle-Treiber dieses Problem nicht. Ich denke, dies ist ein Fehler in den Oracle-Treibern.