sql >> Database teknologi >  >> RDS >> Oracle

EF-forespørgsel til Oracle kaster ORA-12704:tegnsæt uoverensstemmelse

Jeg endte med at få forfatteren til denne (ODP.Net Managed Driver - ORA-12704:tegnsæt mismatch i genereret kode) til at opdatere spørgsmålet, han postede en løsning ved hjælp af en interceptor, jeg vil gå lidt mere detaljeret her.. .

Først dekorerede jeg min DBContext for at indlæse en konfiguration. du kan springe dette over og blot tilføje til din konfiguration, hvis du har en:

[DbConfigurationType(typeof(MyDbConfiguration))]
public partial class MyContext : DbContext

Opret konfigurationsklassen:

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        this.AddInterceptor(new NVarcharInterceptor()); //add this line to existing config.
    }
}

Opret derefter interceptoren:

public class NVarcharInterceptor : IDbCommandInterceptor
{
    public void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }
}


  1. Oracle Datetime-funktioner (fuld liste)

  2. Sådan importeres CSV til MySQL Workbench

  3. SQL-ydeevne:WHERE vs WHERE(ROW_NUMBER)

  4. MySQL 'Bestil efter' - sorterer alfanumerisk korrekt