我有一个类,它有几个浮点属性

class BodyParameters
{
    public float Weight { get; set; }
    public float Height { get; set; }
    public float ThighLength { get; set; }
}

如何为我的"BodyParameters"实体类中的浮点型所有属性设置相同的精度和小数位数?

我当前的解决方案是在模型构建器中逐个设置它们,这可能需要大量手动工作,因为实体类可以具有多达40个属性:

builder.Entity<BodyParameters>(entity =>
{
    entity.Property(entity => entity.Height)
        .HasPrecision(5, 2);
    entity.Property(entity => entity.Weight)
        .HasPrecision(5, 2);
    entity.Property(entity => entity.ThighLength)
        .HasPrecision(5, 2);
});

我也发现了类似的问题:Entity Framework Core - setting the decimal precision and scale to all decimal properties个.

但我只需要将精度设置为在我的entity class中浮动属性,而不是我的DbContext中,

推荐答案

您可以使用如下所示的扩展方法.基本上,它获取具有指定类型的所有属性并对其调用HasPrecision:

  public static ModelBuilder SetAllPrecision<TEntity>(this ModelBuilder modelBuilder, Type targetPropertyType, int precision, int scale)
  {
      var entityType = typeof(TEntity);

      var targetProperties = entityType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(r => r.PropertyType == targetPropertyType);
      foreach (var property in targetProperties)
      {
          var propertyType = property.PropertyType;
          modelBuilder.Entity(entityType).Property(propertyType.Name).HasPrecision(precision, scale);

      }

      return modelBuilder;
  }

您可以这样使用它:

builder.SetAllPrecision<BodyParameters>(typeof(float),5,2);

Csharp相关问答推荐

如何在C#中使用并行主义将数据表转换为动态对象

减少Express Func T、bool断言中的公式中使用的条件运算符(4)数量(最多允许3个)

react 式扩展连接中的非交叉LeftDurationTimeout

ASP.NET MVC购物车数量更新并从购物车中删除项目

在一个模拟上设置一个方法,该模拟具有一个参数,该参数是一个numc函数表达式

在LINQ Where子句中使用新的DateTime

在具有主构造函数的类中初始化属性时出现警告

查找表中的模式

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

System.Net.Http.HttpClient.SendAsync(request)在docker容器内的POST方法30秒后停止

Blazor在FluentButton onClick事件上设置参数

C#阻塞调用或await calling inside calling方法

用C#从Word文档中删除重复的节控件和文本内容控件

如何通过寻找向量长度来优化两个循环?

如何使用MailKit删除邮箱?

EFR32BG22 BLE在SPP模式下与PC(Windows 10)不连接

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

C#中COM对象的实际地址

在C#和HttpClient中使用REST API

当要删除的子模型没有父模型的1:多属性时,如何告诉实体框架设置1:1 FK条目?