EF关于decimal精度的问题

更新时间:2023-08-03 13:21:51 阅读: 评论:0

地球EF关于decimal精度的问题
在 EF当中,当我们使⽤Decimal类型存储到数据库时,EF会默认将精度确认为2位,对于⼀些应⽤来说,2位并不⾜够,于是EF提供了⼀种⽅式去调整精度
public class DB : DbContext
{
public DB()
: ba("name=SqlConnString")
{}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{modelBuilder.Entity<Sku>().Property(p=>p.Weight).HasPrecision(18,3);
}
}
重载OnModelCreating⽅法,在⾥⾯设置Property中的Precision属性。
这种⽅法可以满⾜绝⼤部分的需求,但若是多次出现精度调整的问题,这种写法显然不适合,于是这边利⽤的特性去做批量处理
[AttributeUsage(AttributeTargets.Property, Inherited = fal, AllowMultiple = fal)]
public class DecimalPrecisionAttribute : System.Attribute
{
public byte Precision = 18;dnf暗帝
public byte Scale = 2;
public DecimalPrecisionAttribute(byte precision = 18, byte scale = 2)
{
Precision = precision;三国演义三顾茅庐
Scale = scale;
如何画中国地图
if (Precision < 1 || Precision > 38)
{
throw new AlertException("精度必须在1和38之间.");
}
if (Scale < 1 || Scale > 38)
{
throw new AlertException("刻度必须在1和38之间.");
青海有哪些大学新年家长寄语}
}
}
江畔独步寻花其四然后在属性上添加特性
[DecimalPrecision(18, 3)]
public decimal UsableQty { get; t; }
最后在重载OnModelCreating⽅法
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties().Where(p => p.GetCustomAttributes(typeof(DecimalPrecisionAttribute),fal).OfType<DecimalPrecisionAttribute>().Any())
.Configure(m => m.HasPrecision(m.ClrPropertyInfo.GetCustomAttributes(fal).OfType<DecimalPrecisionAttribute>().First().Precision,
m.ClrPropertyInfo.GetCustomAttributes(typeof(DecimalPrecisionAttribute), fal).OfType<DecimalPrecisionAttribute>().First().Scale));
modelBuilder.Properties().Configure(ConfigurationAction);
九开头成语
ba.OnModelCreating(modelBuilder);
}
其中,Configure⾥⾯可以配置很多东西。
⽹上对于特性还有另外⼀种⽅法去处理,但是不知道为什么,那种⽅法会动态⽣成32位的dll,如果iis设置为64位的话,不重新设置⼀下会报错,所有选择这种⽅式去处理

本文发布于:2023-08-03 13:21:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106598.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:精度   特性   问题   处理   报错   下会   调整
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图