sql >> Databáze >  >> RDS >> Oracle

EF dotaz na Oracle házení ORA-12704:nesoulad znakové sady

Nakonec jsem nechal autora tohoto (ODP.Net Managed Driver - ORA-12704:neshoda znakové sady ve vygenerovaném kódu), aby aktualizoval otázku, zveřejnil řešení pomocí interceptoru, zde půjdu trochu podrobněji. .

Nejprve jsem ozdobil svůj DBContext, abych načetl konfiguraci. můžete toto přeskočit a jednoduše přidat do své konfigurace, pokud nějakou máte:

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

Vytvořte třídu config:

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

Dále vytvořte interceptor:

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. Postgres:Přidejte omezení, pokud ještě neexistuje

  2. MySQL DROP SLOUPEC

  3. Jak získat poslední řádek na skupinu v PostgreSQL

  4. Chcete-li ignorovat duplicitní klíče během „kopírování z“ v postgresql