具有MySql并发令牌的实体框架6无法正常工作

时间:2017-11-06 15:18:24

标签: mysql concurrency entity-framework-6

我有一个使用此数据库表的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日期更新内存模型。不幸的是,它显然需要旧的时间戳,并且无法返回任何杀死事务的记录。

为什么会发生这种情况?如何才能完成预期的操作?

谢谢, 安迪

1 个答案:

答案 0 :(得分:0)

请查看可能的错误报告

https://bugs.mysql.com/bug.php?id=73271