处理并发冲突

数据库并发是指多个进程或用户同时访问或更改数据库中的相同数据的情况。并发控制是指用于确保存在并发更改时数据一致性的特定机制。

Mego实现了乐观并发控制,这意味着它可以让多个进程或用户独立进行更改,而无需同步或锁定的开销。在理想情况下,这些变化不会互相干扰,因此能够成功。在最糟糕的情况下,两个或更多进程将尝试进行相互冲突的更改,并且只有其中一个应该成功。

并发控制实现

配置为并发令牌的属性用于实现乐观并发控制:无论何时执行更新或删除操作,系统都会自动将数据库中的值与提交值进行比较,由于我们没有像EF中的对象跟踪所以是无法对比对象的原始值。

如果值匹配,操作可以完成。

如果值不匹配,则Mego会假定其他用户执行了冲突操作并中止当前事务。

另一个用户执行与当前操作冲突的操作的情况称为并发冲突。

在关系数据库上,Mego包含WHERE对任何UPDATE或DELETE语句的子句中的并发令牌值的检查。执行完语句后,Mego将读取受影响的行数。

如果受到影响的行数与期望不匹配,则检测到并发冲突,并且Mego将引发DbCommitConcurrencyException。

例如,我们可能需要配置LastName上Person是并发令牌。然后,对Person进行的任何更新操作都将在WHERE条款中包含并发检查:

UPDATE [Person] SET [FirstName] = @p1
WHERE [PersonId] = @p0 AND [LastName] = @p2;

时间戳说明

由于不同数据库的时间戳是不想同的,因此Mego中时间戳会有如下两个特性组合描述。

  1. 数据库值生成特性
  2. 并发令牌特性

    例如如下示例,在MySQL中时间戳即为日期时间,通过Mego是无法修改UpdateDate这个属性的,但是这个属性会参与提交并发检查,当数据发生更改时都会从数据库返回新的值。
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
[ConcurrencyCheck]
[GeneratedValue(EGeneratedPurpose.InsertUpdate)]
public DateTime UpdateDate { get; set; }
}

[文档目录]

最新文章

  1. Protocol Buffer技术
  2. zoj 2107&&hdu 1007最近点对问题
  3. 装载: Matlab 提取矩阵 某一行 或者 某一列 的方法
  4. How to create Lookup Worker Filtered by Legal Entity[AX2012]
  5. CodeForces 706C Hard problem
  6. Ionic start 创建项目报错 Error with start undefined
  7. NJCTF 极少部分wp
  8. JavaSe:代码块执行顺序
  9. Struts2 中的数据传输的几种方式
  10. paas saas iaas 区别
  11. C++调用C语言的库函数
  12. Laravel 系列入门教程(四)【最适合中国人的 Laravel 教程】
  13. document.documentElement.scrollTop(获取滚动条位置)
  14. CreateProjectFormat——初始项目目录格式
  15. bzoj1016/luogu4208 最小生成树计数 (kruskal+暴搜)
  16. php读取文件内容的4钟常用方法函数
  17. delphi文件操作的总结
  18. python 快速幂求斐波那契数列
  19. JUnit测试模块使用
  20. 数学图形(1.38)anguinea曲线

热门文章

  1. OOP面向对象程序设计
  2. Intellij IDEA查看所有断点
  3. 【Unity与23种设计模式】代理模式(Proxy)
  4. shell脚本中的整数测试
  5. git下载Ardupilot源码
  6. 生成式模型之 GAN
  7. C语言--第0次作业
  8. Django+xadmin打造在线教育平台(六)
  9. 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介
  10. python+pycahrm+windows环境准备