Сопоставление NULL с типом default - PullRequest
0 голосов
/ 26 марта 2019

У меня есть классы моделей, которые мне нужно использовать с Entity Framework Core.К сожалению, я не могу внести изменения в эти классы, и ни один из них не использует пустые столбцы, в то время как таблицы базы данных, которые они отображают, имеют нулевые столбцы.EF генерирует (ожидаемое) исключение при попытке вытащить данные из базы данных в класс модели.

Есть ли способ настроить EF Core для автоматического сопоставления значений NULL в столбце со значением по умолчанию для данного типа?

Например,

//Model class
class Foo
{
    public int Id {get; set;}
    public int Age {get; set;}
}

//DbContext
public class MyContext: DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    { 
        modelBuilder.Entity<MyContext>(entity =>
        {
            entity.HasKey(e => new { e.Id });
            entity.ToTable("Foo", "dbo");
            entity.Property(e => e.Age).HasColumnName("Age");
        }
    }
}

Цель будетБыть может, при запросе данных значение NULL в столбце Age станет типом по умолчанию (в данном случае 0).

1 Ответ

1 голос
/ 26 марта 2019

Если вы можете изменить реализацию класса без изменения его открытого определения , вы можете сделать это.

public class Foo
{
    public int Id { get; set; }
    private int? _Age { get; set; }
    public int Age
    {
        get => _Age.GetValueOrDefault();
        set => _Age = value;
    }
}

public class MyContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Foo>(entity =>
        {
            entity.Property("_Age").HasColumnName("Age");
            entity.Ignore(e => e.Age);
        });
    }
}
...