Oracle
 sql >> база данни >  >> RDS >> Oracle

EF заявка към Oracle хвърля ORA-12704:несъответствие на набора от знаци

В крайна сметка накарах автора на това (ODP.Net Managed Driver - ORA-12704:несъответствие на набора от знаци в генерирания код), за да актуализира въпроса, той публикува заобиколно решение с помощта на прехващач, тук ще направя малко по-подробно. .

Първо, украсих моя DBContext, за да заредя конфигурация. можете да пропуснете това и просто да добавите към вашата конфигурация, ако имате такава:

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

Създайте конфигурационния клас:

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

След това създайте прехващача:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NLS_UPPER() Функция в Oracle

  2. APPLSYSPUB схема

  3. Свързване към групи от обекти чрез (ВЪНШНО ПРИЛОЖЕНИЕ) oracle 11.2.0.3.0 не поддържа прилагане

  4. Инструмент за разработчици на Oracle SQL:Изтегляне и инсталиране

  5. Завъртане на таблица в SQL (т.е. кръстосана табулация / кръстосана таблица)