Как устранить ошибку приведения в DB2 Boolean в .NET Core Boolean? - PullRequest
0 голосов
/ 10 октября 2019

Мне нужно привести Boolean из запроса DB2 к Booleans в .NET Core

У меня есть запрос для проверки соответствия строки с Regex.

Я пробовал несколько приведений: BOOLEAN, TINYINT, SMALLINT.

CASE WHEN (REGEXP_LIKE(TESTNAME.COL1, 'Test1')) THEN CAST(true AS BOOLEAN) ELSE CAST(false AS SMALLINT) END as Error

Моя сущность выглядит примерно так:

public class ErrorView {
    [Required] public string Key { get; set; }
    public bool Error { get; set; }
}

Соединениек базе данных может быть установлено, это не проблема.

Однако я получаю следующее

Ошибка: System.InvalidCastException - Невозможно привести объект типа 'System.Int16'to type' System.Boolean '

.

Точно такой же код прекрасно работает в сочетании с MySQL Server (с учетом некоторых адаптаций в SQL-запросе). Сам запрос работает в Datagrip.

Редактировать 1: Я использую пакет NuGet IBM.EntityFrameworkCore в версии 1.3.0.100. А для разработки я использую Windows 10 (64-битную) на x64-процессоре.

Редактировать 2: Это то, что я называю:

ExternalDbContextFactory dbContextFactory = new  ExternalDbContextFactory(applicationDbContextOptions);
var context = dbContextFactory.Create();
var sqlRuleResult = context.EntityName.FromSql(regexRule);

Я получаю ошибку приведения в методе Microsoft. Попытка привести его вручную в Entity не работает, поскольку она не достигает этой точки.

Stacktrace:

в Microsoft.EntityFrameworkCore.Metadata.Internal.EntityMaterializerSource.TryReadValue [TValue] (ValueBuffer & valueBuffer, индекс Int32, свойство IPropertyBase)

в lambda_method (Closure, MaterializationContext)

в Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.UnbufferedEntityShaxtConte ()ValueBuffer & valueBuffer)

в Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext (DbContext _, логический буфер)

в Microsoft.EntityFraginInEx[TState, TResult] (состояние TState, Func 3 operation, Func 3 verifySucceeded)

в Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext ()

в Microsoft.EntityFrameworkC.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext ()

...