使用IQToolKit和MySQL时如何实现选择更新

时间:2012-03-20 11:25:51

标签: mysql linq locking

在MySQL中使用IQToolkit,我想在事务中执行LOCKING READ,根据mysql文档,这样做的方法是使用“SELECT ... FOR UPDATE”。 然而,默认情况下LINQ似乎不支持这一点,我发现this thread通过处理 ChangeConflictException 来讨论实现类似目标。使用MySQL的IQToolkit LINQ提供程序来做同样的事情的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

IQToolkit没有请求行锁定的工具。但是,如果您正在使用事务,则应该获取事务中发生的读取的读锁定,具体取决于事务的隔离级别。

LINQ to SQL特别支持乐观并发,这意味着API的预期用途是您不会在事务中读取数据,但是当您提交更改时,所有这些都在事务中发生(发生在事务中)代表您进行覆盖。)发送更新时会出现乐观部分。如果从读取数据后行已更改,则这些行的更新将失败。这使您可以选择中止整个事务,自动重新开始读取等,或使用更改冲突异常中的信息来挑选和选择如何将更改与数据库更改合并,然后重新提交它们。选择和选择的方法很复杂,除非你知道你在做什么,否则你应该只使用'从头开始重试整个'的方法。

IQToolkit无法让您使用“选择并重新提交”方法。因此,如果尝试乐观并发,那么最好是服务,如果更新失败,只需重试整个事情。如果您更愿意使用悲观并发并且简单地将读取查询放在事务下并不能为您提供所需的锁定,那么您可以自由地将该功能添加到IQToolkit,因为它是一个有趣的源代码工具包和构建IQueryable查询提供程序的示例。