问题描述
我有一个 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 是正确的。
关于确保您的调试代码不会让您陷入困境的警示故事!