EF Core:为指定实体类的所有decimal属性统一设置精度
针对指定实体类统一配置Decimal属性精度(5,2)
首先将BodyParameters类的float属性替换为decimal类型:
class BodyParameters { public decimal Weight { get; set; } public decimal Height { get; set; } public decimal ThighLength { get; set; } }
方案一:利用EF Core实体元数据批量配置
通过实体的元数据获取所有decimal(含可空decimal?)类型属性,统一设置精度和刻度,这种方式更贴合EF Core的模型构建逻辑:
builder.Entity<BodyParameters>(entity => { // 筛选当前实体中所有decimal类型的属性 var decimalProps = entity.Metadata.GetProperties() .Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?)); foreach (var prop in decimalProps) { prop.SetPrecision(5); prop.SetScale(2); } });
方案二:通过反射批量配置
如果更习惯用反射直接操作类的属性,也可以用以下方式:
builder.Entity<BodyParameters>(entity => { // 反射获取BodyParameters类中所有decimal类型的属性 var decimalProps = typeof(BodyParameters) .GetProperties() .Where(p => p.PropertyType == typeof(decimal) || p.PropertyType == typeof(decimal?)); foreach (var prop in decimalProps) { entity.Property(prop.Name) .HasPrecision(5, 2); } });
两种方案都能避免逐个手动配置属性的重复代码,推荐优先使用方案一,因为它基于EF Core的模型元数据,能自动识别已经被映射的属性,兼容性更好。
内容的提问来源于stack exchange,提问作者Nowayout
相关产品推荐
相关产品推荐

