Я создал простой 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);
... безрезультатно. У меня заканчиваются идеи, любая помощь приветствуется.