Oracle & EF Core BoolToTwoValuesConverter not Converter-ing - PullRequest
1 голос
/ 12 февраля 2020

Я создал простой BoolToTwoValuesConverter<int>, поэтому, когда в столбце базы данных есть -1, он преобразуется в false, а 0 преобразуется в true:

var falseNegOneTrueZero = new BoolToTwoValuesConverter<int>(-1, 0);

Я сопоставил свое свойство с этим конвертером:

modelBuilder.Entity<Foo>(entity => 
{
   entity.Property(e => e.IsWhatever)
         .HasColumnName("CRYPTIC_COL_NM")
         .HasColumnType(number(1,0))
         .HasConversion(falseNegOneTrueZero);

    // etc...
}

// example of using the property in a query

return summaries.Where(s => s.IsWhatever);

, но всякий раз, когда я пытаюсь использовать столбец в своем запросе, он задыхается:

Microsoft.AspNetCore.Diagnostics. DeveloperExceptionPageMiddleware [1] Произошло необработанное исключение при выполнении запроса. System.InvalidCastException: Невозможно привести объект типа 'System.Int32' к типу 'System.Boolean'. в Oracle .EntityFrameworkCore.Storage.Internal.OracleBoolTypeMapping.GenerateNonNullSqlLiteral (значение объекта) в Microsoft.EntityFrameworkCore.Query. Sql .DefaultQuerySql * 101 * константа * 101 * постоянное выражение * Я также попробовал это "многословно", указав преобразование следующим образом:

   entity.Property(e => e.IsWhatever)
         .HasColumnName("CRYPTIC_COL_NM")
         .HasColumnType(number(1,0))
         .HasConversion(
               // 0 is true, -1 is false
              entityValue => entityValue ? 0 : -1,
              dbValue => dbValue == 0);

... безрезультатно. У меня заканчиваются идеи, любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 февраля 2020

Удаление оператора .HasColumnType() устранило проблему go. Мне это не нравится, но это сработало:

entity.Property(e => e.IsWhatever)
     .HasColumnName("CRYPTIC_COL_NM")
     .HasConversion(falseNegOneTrueZero);
...