EF Core decimal 类型设置精度

[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
public class DecimalPrecisionAttribute : Attribute
{
    #region Field
        private byte _precision = 18;
        public byte _scale = 2;
        #endregion

    #region Construct
    /// <summary>
    /// <para>自定义Decimal类型的精确度属性</para>
    /// </summary>
    /// <param name="precision">precision
    /// <para>精度(默认18)</para></param>
    /// <param name="scale">scale
    /// <para>小数位数(默认2)</para></param>
    public DecimalPrecisionAttribute(byte precision = 18, byte scale = 2)
    {
        Precision = precision;
        Scale = scale;
    }
    #endregion

    #region Property
    /// <summary>
    /// 精确度(默认18)
    /// </summary>
    public byte Precision
    {
        get { return this._precision; }
        set { this._precision = value; }
    }

    /// <summary>
    /// 保留位数(默认2)
    /// </summary>
    public byte Scale
    {
        get { return this._scale; }
        set { this._scale = value; }
    }
    #endregion
}

重写xxDbContext类 OnModelCreating 方法 

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    foreach (var item in modelBuilder.Model.GetEntityTypes())
    {
        var type = item.ClrType;
        var props = type.GetProperties().Where(c => c.IsDefined(typeof(DecimalPrecisionAttribute), true)).ToArray();
        foreach (var p in props)
        {
            var precis = p.GetCustomAttribute<DecimalPrecisionAttribute>();
            modelBuilder.Entity(type).Property(p.Name).HasColumnType($"decimal({precis.Precision},{precis.Scale})");
        }
    }
    base.OnModelCreating(modelBuilder);
}

运行 AddMigration 命令生成如下脚本

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值