映射NULL以键入default

时间:2019-03-26 17:21:48

标签: .net mapping entity-framework-core

我有一些需要与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");
        }
    }
}

目标是当请求数据时,Age列中的null将成为默认类型(在这种情况下为0)。

1 个答案:

答案 0 :(得分:1)

如果您可以更改的实现而无需更改其公共定义,则可以执行此操作

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);
        });
    }
}