Другим решением будет использование CommandInterceptors и изменение результирующего SQL-запроса до его выполнения.
У меня были похожие проблемы с базой данных оракула и провайдером ODP.net.
AsNonUnicode не решил мою проблему.
EF 6 предоставляет возможность перехватывать контекст с помощью IDbCommandInterceptor до и после того, как он выполняет операции ExecuteNonQuery, ExecuteScalar, ExecuteReader с базой данных. Вам нужно будет настроить перехватчик, используя конфигурационный файл или конфигурацию на основе кода.
Файл конфигурации:
<entityFramework>
<interceptors>
<interceptor type="EfSample.EfCommandInterceptor, EfSample">
</interceptor>
</interceptors>
</entityFramework>
Конфигурация на основе кода:
public sealed class EntityFrameworkConfiguration : DbConfiguration
{
public EntityFrameworkConfiguration ()
{
this.AddInterceptor(new EfCommandInterceptor());
}
}
Создайте CommandInterceptor, как показано ниже:
public sealed class EfCommandInterceptor
: DbCommandInterceptor
{
/// <summary>
/// Called when Reader is executing.
/// </summary>
/// <param name="command"></param>
/// <param name="interceptionContext"></param>
/// <inheritdoc />
public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
{
if(command.CommandText.Contains("N''"))
{
command.CommandText = command.CommandText.Replace("N''", "''");
}
base.ReaderExecuting(command, interceptionContext);
}
}