Подтвердить что ты не робот

Самый простой способ справиться с преобразованием 0/1 в False/True в EF 4.x?

Сохраненный Proc возвращает столбец со значением, равным 0 или 1, без преобразования в BIT. В моем POCO, если я объявляю поле как

public bool MyColumn {get; set;}

Я получаю эту ошибку:

The specified cast from a materialized 'System.Int32' type to the 'System.Boolean' type is not valid.

Это действительно имеет смысл, поскольку EF распознает возвращаемое значение как целое число.

Мне интересно, есть ли простой способ (добавьте аннотацию или используйте свободно api, возможно), автоматически конвертируйте 0/1 в False/True в картирование за сценой, не касаясь Proc?

Спасибо заранее!

4b9b3361

Ответ 1

Что вы можете сделать, так это иметь другое свойство для представления логического представления. Украсьте его атрибутом NotMapped, чтобы EF не учитывал его для Mapping. Do и If condition и return true /false в зависимости от значения свойства Other.

public Class Customer
{

  [NotMapped]
  public bool MyColumnBool 
  {
      get
      {
         return (MyColumn ==1);
      }
  }

  public int MyColumn {get; set;}
  // other properties

}

Ответ 2

Другой вариант - вернуть BIT из хранимой процедуры, чтобы вам не нужно было что-либо делать на стороне С# или использовать какое-либо странное украшение. Это означает, что вы можете применить целочисленное значение к BIT в T-SQL, как показано ниже:

select col1, col2, CONVERT(BIT, CASE WHEN col3 IS NULL THEN 0 ELSE 1 END) as colWithBit
FROM table1

Ответ 3

В вашем ApplicationDbContext (класс, который наследуется от DbContext) вы можете использовать Fluent Api для преобразования значений для базы данных.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  base.OnModelCreating(modelBuilder);
  modelBuilder.Entity<TheNameOfYourModelClass>()
    .Property(p => p.MyColumn)
    .HasConversion(
       v => v ? : 1 : 0,
       v => (v == 1) ? true : false);
}

Теперь ваша база данных будет содержать 1 при вставке true для MyColumn и наоборот. При чтении из вашей базы данных 1 будет преобразовано в true и наоборот.

Ответ 4

Используйте System.Convert.ToBoolean(int)