实体框架正在舍入整数值或屏蔽它们

本文关键字:屏蔽 整数 框架 舍入 实体 | 更新日期: 2023-09-27 18:13:16

实体框架改变我传递到数据库(oracle)的值
在Oracle中,我有一个表,字段名为PointX为Float,映射到EF为Decimal。
当我运行代码时,要保存的实体具有值为37的属性PointX,并在DB上保存40
我测试的值的例子

实体。PointX -> Oracle。PointX
37 -> 40
6543210 -> 6000000
41 -> 40
35 -> 40

在我粘贴在这里的代码块上,我检查了domainObject的值,并且总是ok的。
SaveChanges执行后,我检查Oracle中的值,新值完全错误。

public virtual void Save(T domainObject)
{
    // domainObject.PointX = 37;    
    db.SaveChanges();
}

我不明白为什么它这样保存值。我迷路了。

实体框架正在舍入整数值或屏蔽它们

检查float类型的oracle精度。在我的情况下是126 (Oracle 10)。
使用文本编辑器编辑edmx,并检查float类型的字段。如果没有设置属性的精度,只需设置与oracle版本相同的精度,如下所示:

edmx with problem

<EntityType Name="MyTableEntity">
    <...>
    <Property Name="PointX" Type="float" Nullable="false" />

修改实体字段设置精度:

<EntityType Name="MyTableEntity">
    <...>
    <Property Name="PointX" Type="float" Nullable="false" Precision="126" />