Строка EF Core ValueConverter в bool для строкового столбца с нулевым значениемC#

Место общения программистов C#
Ответить
Anonymous
 Строка EF Core ValueConverter в bool для строкового столбца с нулевым значением

Сообщение Anonymous »

Мне нужны отзывы, которые помогут понять, возможно ли то, чего я пытаюсь достичь. У меня есть столбец базы данных, который представляет собой строковый тип, допускающий значение NULL (в основном varchar), и я использую ValueConverter для преобразования значения строки db в значение bool сущности в зависимости от того, имеет ли значение db значение null, 'N' (false) или 'Y ' (правда).
Я также хотел исключить значение nullable bool? введите свойство сущности, используя EntityConfiguration. Проблема, с которой я сейчас столкнулся, заключается в том, что когда я делаю свойство сущности ненулевым логическим значением вместо bool? миграция завершается неудачей, говоря, что тип должен иметь значение NULL.
Сначала у меня есть этот ValueConverter для преобразования моих строковых значений в логические значения, не допускающие значения NULL.

Код: Выделить всё

internal class StringToBoolValueConverter : ValueConverter
{
public StringToBoolValueConverter() : base(ConvertToDbValue, ConvertToEntityValue) { }

private static Expression ConvertToEntityValue
=> value => value == null || value.Contains("N", StringComparison.OrdinalIgnoreCase) ? false : true;

private static Expression ConvertToDbValue
=> value => value == false ? "N" : "Y";

/// 
/// Allow nulls to pass into converter for conversion.
/// 
public override bool ConvertsNulls => true;
}
Тогда у меня есть объект, использующий свойство bool, не допускающее значения NULL.

Код: Выделить всё

public class EntityName
{
public bool IsActive { get; set; }
}
Наконец, у меня есть следующая конфигурация для этого свойства.

Код: Выделить всё

public class EntityNameConfiguration : ...omitted
{
builder.Property(e => e.IsActive)
.HasConversion()
.HasMaxLength(10)
.IsUnicode(false)
.IsRequired(false)
}
Я ожидал, что EF будет знать, что строка, допускающая значение NULL, будет преобразована ValueConverter в логическое значение, не допускающее NULL, но вместо этого я получаю сообщение об ошибке, в котором говорится, что мне нужно сделать свойство IsActive обнуляемым. .
Возможно ли то, что я хочу здесь сделать?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-column
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»