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