我有一个使用此数据库表的EF6模型:
Property(t => t.LastModified)
.IsConcurrencyToken()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
在代码优先的Map类中指定
2017-11-06T14:18:00.896200Z 183 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2017-11-06T14:18:00.896200Z 183 Query BEGIN
2017-11-06T14:18:00.897200Z 183 Query UPDATE `person` SET `birth_date`='1973-03-28 00:00:00 ' WHERE (`id` = 1) AND (`last_modified` = '2017-10-17 08:36:44.586000');
2017-11-06T14:18:00.897200Z 183 Query SELECT
`last_modified`
FROM `person`
WHERE row_count() > 0 and (`id` = 1) AND (`last_modified` = '2017-10-17 08:36:44.586000')
2017-11-06T14:18:00.898200Z 183 Query ROLLBACK
我正在使用GraphDiff从分离的模型更新数据库,这正确地确定birth_date字段已更改并将Person模型标记为已修改。
当我执行ctx.SaveChanges时,更新失败并出现并发错误,数据库日志显示以下内容:
header('location: XXX')
UPDATE已正确完成且last_modified值正确,但已成功更新后已更改。以下SELECT语句存在问题。我假设其目的是使用新的last_modified日期更新内存模型。不幸的是,它显然需要旧的时间戳,并且无法返回任何杀死事务的记录。
为什么会发生这种情况?如何才能完成预期的操作?
谢谢, 安迪