.net - 将 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)。
解决方案
如果您可以更改类的实现而不更改其公共定义,则可以这样做。
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);
});
}
}
推荐阅读
- python - 从另一个数据帧中删除数据帧子集无法与 pandas 合并和 isin 运算符一起正常工作
- c# - 强制 EntityFramework 刷新数据库上下文 C#
- javascript - 无法在材质 ui react 中准确设置网格
- swagger - 如何在 Asp.Net Core 2.1 中使用 Swagger 和 Ocelot
- c# - 从字符串数组中删除具有重复字母的字符串
- python - 如何使用 python selenium 测试定位反应 CreatableSelect 元素
- java - 使用 html 页眉页脚在页眉/页脚 itext 中渲染图像
- api - 是否存在描述不同 API(REST、WebSocket、gRPC、自定义框架)的通用工具?
- python - 如何使用 python opencv 中的均值偏移查找图像中的簇?
- jquery - Webcam.js 错误:找不到支持的网络摄像头接口