在将客户端对象映射到实体后,实体框架的更改跟踪检测小数精度差异,我不希望它这样做

问题描述

我有一个 post 方法,它从客户端获取变更集数据,并根据从客户端发送的实体相应地更新数据库。我正在尝试确定实体是否已更改,但遇到了问题。反序列化对象后,我从数据库中检索有问题的实体,然后将客户端对象映射到该实体。在此过程之后,我尝试使用实体框架的更改跟踪来查看实体是否已被修改,并且每次都会返回修改。经过一番挖掘,我发现客户端可能会发送类似 1.000 的数据,而数据库将其存储为 1.0,即使数据库的精度是十进制 (5,3)。

有没有办法告诉实体框架的更改跟踪忽略精度差异?

这是我的跟踪代码

private bool HasspanChanged(Span storeSpan,ChangeTracker tracker)
{
     var entries = tracker.Entries();
     if (entries.Any(x => x.Entity.GetType() == storeSpan.GetType() && ((Span)x.Entity).SpanId == 
       storeSpan.SpanId && x.State != EntityState.Unchanged))
          return true;
     return false;
}

解决方法

最终的答案是,我查看当前数据和原始数据之间差异的方式实际上已经改变了数据。所以实体框架并没有以不同的方式看待精度。我如何输出数据以便我可以在调试期间读取它是实际问题。其中一个值在映射期间确实被修改,因此 EntityState 是正确的。

关于确保您的调试代码不会让您陷入困境的警示故事!