首页 > 解决方案 > 将 NULL 映射到类型默认值

问题描述

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

目标是在请求数据时,列中的 nullAge将成为默认类型(在本例中为 0)。

标签: .netmappingentity-framework-core

解决方案


如果您可以更改类的实现而不更改其公共定义,则可以这样做。

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

推荐阅读