这里有一个棘手的问题,涉及微风、实体框架和日期时间字段。
在保存实体时,由于日期字段在进入和离开微风系统时都添加了当前微秒,因此出现了乐观并发异常。
因此,实体框架认为其他东西已经编辑了数据库,因为它的原始值不再等于数据库中的值(因为微秒值是当场弥补的)。生成如下SQL:
exec sp_executesql N'UPDATE [dbo].[Profiles] SET [DOB] = @0, [TotalTime] = @1, [Modified] = @2 WHERE (([Id] = @3) AND ([DOB] = @4)) ',N'@0 datetime2(7),@1 float,@2 datetime2(7),@3 uniqueidentifier,@4 datetime2(7)',@0='2015-06-22 15:21:43.4180000',@1=3210,@2='2015-06-22 15:22:52.7520000',@3='F944965E-9E18-E511-BF26-4CEB4272XXXX',@4='2015-06-22 15:21:01.5320000'
EF正在寻找日期2015-06-22 15:21:01.532000,但存储的日期实际上是2015-06-22 14:21:01.533。相差1毫秒。
我不知道为什么会这样?
我目前试图实现的修复方法是将此函数添加到我的应用程序的main.js中。
bread.DataType.parseDateFromServer=函数(源){var dt=力矩(源).toDate();dt设置毫秒(0);返回dt;};
这似乎让我摆脱了困境。
Doh!事实证明,有人将实体图中DOB字段的ConcurrencyMode设置为"Fixed",这导致它以这种方式进行了大量验证。将其改回"无"修复了它。