【发布时间】:2019-08-14 13:36:24
【问题描述】:
我继承了现有系统的旧代码库。一些新功能要添加,要修复一些错误,但不能更改数据库。
其中一个错误是,当尝试从特定表更新记录时,出现异常:
System.Data.Entity.Core.OptimisticConcurrencyException: 'Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.'
有问题的表有一个复合主键,数据库中有两个字段是tinyints,另一个是datetime。使用的 EF 是使用 Model First 创建的,因此 EDMX 是从数据库构建的,当然会将 datetime 映射到 .NET DateTime。
环顾其他问题,问题似乎出在 DateTime 映射上;即使我从数据库中获取了一个实体,对其进行编辑并将其标记为EntityState.Modified,当我尝试写回它时,它也找不到匹配的记录,因为PK 的datetime 部分与.NET DateTime - 由于精度。其他建议是“将数据库中的datetime 更改为datetime2”,但按照说明我无法更改数据库。
我尝试在 EDMX 中手动将“日期时间”的精度设置为 0,3 和 7,但没有任何影响。如何在不更改数据库的情况下让 EF 在此处创建正确的 SQL 语句,并且出于偏好,保持模型优先的方法(因为它是一个复杂的 EDMX,需要很长时间才能删除)?
【问题讨论】:
-
您为 EDMX 中的 Precision 属性尝试了哪些值? '3' 不起作用吗?
-
“我尝试在 EDMX 中手动将 'DateTime' 的精度设置为 0,3 和 7,但没有任何影响。”
标签: c# entity-framework datetime entity-framework-6 ef-model-first