系统发生截断.当使用实体框架5到Oracle 11g/12c时,十进制为Oracle's浮点
本文关键字:Oracle 十进制 12c 浮点 11g 系统 框架 实体 | 更新日期: 2023-09-27 18:14:24
我使用实体框架5代码首先与Oracle 11g或12c数据库交谈(我已经验证了两个版本中的问题)。Oracle字段是FLOAT
类型,而我的POCO字段是decimal
。我使用decimal
,因为我需要我的小数点精确到5位。
当我保存实体时,数据库中的结果记录总是将值四舍五入到小数点后2位。
我已经通过数据库工具(Toad)验证了该列将支持5的精度。由于向后兼容性,我无法更改数据库中的数据类型。我发现使用double
没有同样的问题。但是double
以给出不精确的数字而臭名昭著,特别是在执行多个数学运算时。
有人知道为什么decimal
值会被截断吗?我正在使用Oracle数据提供程序。
@Grant在上面评论中提供的链接提供了答案。我在这里复述一下。默认的decimal
对应的是Oracle的DECIMAL(18,2)
。这就是为什么四舍五入到小数点后两位。为了改变默认行为,必须在Context类的OnModelCreating
覆盖中添加一条语句。(在EF6中,您可以一次更改所有decimal
字段的约定,如此处所示。)
为特定Decimal
字段更改Decimal
映射
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//...
modelBuilder.Entity<MyEntity>().Property(x => x.MyProperty).HasPrecision(18, 5);
//...
}