sql >> Databasteknik >  >> RDS >> Oracle

EF-fråga till Oracle kastar ORA-12704:teckenuppsättningsfel

Det slutade med att jag fick författaren till detta (ODP.Net Managed Driver - ORA-12704:teckenuppsättningsfel i genererad kod) för att uppdatera frågan, han postade en lösning med hjälp av en interceptor, jag ska gå lite mer i detalj här. .

Först dekorerade jag min DBContext för att ladda en konfiguration. du kan hoppa över detta och bara lägga till i din konfiguration om du har en:

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

Skapa konfigurationsklassen:

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

Skapa sedan interceptorn:

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. vad som händer i adop-fasen förbereda

  2. Oracle SQL DATE-konverteringsproblem med iBATIS via Java JDBC

  3. postgres:uppgradera en användare till en superanvändare?

  4. SELECT COUNT(*) AS count - Hur man använder denna räkning