当前位置: 首页 > wzjs >正文

某企业网站的设计与实现做网站小程序挣钱吗

某企业网站的设计与实现,做网站小程序挣钱吗,选择网站建设公司好,深圳医疗网站建设文章目录 前言一、乐观并发的核心思想二、实现方法1)使用并发令牌(Concurrency Token)2)处理并发冲突 三、工作原理四、适用场景五、与悲观并发的对比六、最佳实践总结 前言 Entity Framework (EF) Core 默认支持 乐观并发控制&a…

文章目录

  • 前言
  • 一、乐观并发的核心思想
  • 二、实现方法
    • 1)使用并发令牌(Concurrency Token)
    • 2)处理并发冲突
  • 三、工作原理
  • 四、适用场景
  • 五、与悲观并发的对比
  • 六、最佳实践
  • 总结


前言

Entity Framework (EF) Core 默认支持 乐观并发控制(Optimistic Concurrency Control),它通过检测数据冲突(而不是显式加锁)来保证数据一致性。

一、乐观并发的核心思想

  1. 无锁机制:允许多个事务同时读取和修改数据,提交时检查数据是否被其他事务修改。
  2. 冲突检测:通过版本号(RowVersion)或字段值比较,如果数据已被修改,则抛出
    DbUpdateConcurrencyException

二、实现方法

1)使用并发令牌(Concurrency Token)

  1. 为实体添加一个并发标记字段(如 RowVersion),每次更新时检查该字段是否与数据库中的值一致。

  2. 示例:通过 [ConcurrencyCheck] 特性标记字段

    	public class House{public long Id { get; set; }public string Name{ get; set; }[ConcurrencyCheck]  // 标记为并发令牌public string Owner{ get; set; }}
    
  3. 示例:或通过 Fluent API 配置

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {modelBuilder.Entity<House>().Property(p => p.Owner).IsRowVersion()          // 自动映射为 SQL Server 的 `rowversion` 类型.IsConcurrencyToken();    // 标记为并发令牌
    }
    

2)处理并发冲突

  1. 当检测到数据已被修改时,EF Core 会抛出 DbUpdateConcurrencyException,开发者需捕获并处理冲突。

    try
    {var house = await context.Houses.FindAsync(houseId);house.Owner = "Tom";await context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException ex)
    {// 处理冲突var entry = ex.Entries.Single();var databaseValues = await entry.GetDatabaseValuesAsync();if (databaseValues == null){// 数据已被删除Console.WriteLine("数据已被删除!");}else{// 获取当前数据库中的值var currentValues = databaseValues.ToObject() as House;// 策略1:使用数据库最新值覆盖当前修改entry.OriginalValues.SetValues(databaseValues);// 策略2:合并值(手动处理冲突)// currentValues 是数据库中的最新值// entry.Entity 是当前尝试提交的值// 例如:保留用户修改的某些字段,合并其他字段entry.Entity.Owner= "Tom";entry.Entity.RowVersion = currentValues.RowVersion;// 重新提交await context.SaveChangesAsync();}
    }
    

三、工作原理

  1. 查询数据:读取数据时,EF Core 会记录并发令牌的原始值(如 RowVersion)。

  2. 更新数据:提交修改时,生成的 SQL 会包含 WHERE 条件,检查并发令牌是否未被修改。

    UPDATE [T_Houses]
    SET [Owner] = @p0
    WHERE [Id] = @p1 AND [Owner] = @p2;
    
  3. 冲突检测:如果受影响的行数为 0(即 RowVersion 不匹配),抛出异常。

四、适用场景

  1. 低冲突概率:适合大部分时间数据竞争较少的场景。
  2. 高吞吐需求:避免锁机制的开销,提升性能。
  3. 分布式系统:无锁机制更适合跨服务的并发操作。

五、与悲观并发的对比

乐观并发悲观并发
实现方式版本号或字段检查(RowVersion、并发令牌)显式加锁(事务+锁机制)
性能低冲突时更高效高竞争时可能更高效
复杂度EF Core 内置支持,自动检测冲突需要手动管理锁和事务
数据竞争可能需重试或合并数据强制串行化,避免冲突

六、最佳实践

  1. 选择并发令牌
    优先使用 RowVersion(自动递增的二进制字段),而非业务字段。
    若使用业务字段(如 LastUpdatedTime),需确保其值在每次更新时被修改。
  2. 冲突处理策略
    客户端优先:强制覆盖数据库的值(需谨慎)。
    数据库优先:放弃当前修改,使用最新值。
    合并值:手动合并冲突字段(如用户编辑的字段优先)。
  3. 重试机制
    在分布式系统中,可为关键操作添加重试逻辑(如 Polly 库)。

总结

EF Core 的乐观并发通过版本号或字段值检测冲突,无需显式加锁,适合低竞争场景。通过 ConcurrencyCheckIsRowVersion() 配置并发令牌,并在冲突时通过 DbUpdateConcurrencyException 实现灵活的数据合并或重试逻辑。


文章转载自:

http://0MBU66hi.jhrqn.cn
http://rdOGpZja.jhrqn.cn
http://ihM2gXdO.jhrqn.cn
http://tsdwWH5b.jhrqn.cn
http://eiUw4VzU.jhrqn.cn
http://J7d7EGMb.jhrqn.cn
http://nRtmSSXX.jhrqn.cn
http://Tzhu046X.jhrqn.cn
http://dLfznoI1.jhrqn.cn
http://b8lROwcs.jhrqn.cn
http://6i3bQenp.jhrqn.cn
http://FUsHR59q.jhrqn.cn
http://yE8v5Vj6.jhrqn.cn
http://SsUxfJsB.jhrqn.cn
http://7w5vDSlt.jhrqn.cn
http://4L8qZ41o.jhrqn.cn
http://pok0xHPA.jhrqn.cn
http://JtjyXkhC.jhrqn.cn
http://yyoo1NMw.jhrqn.cn
http://OEj3gIlF.jhrqn.cn
http://cY5itDQ6.jhrqn.cn
http://8b2CTNHp.jhrqn.cn
http://FTWcMtOL.jhrqn.cn
http://WHjRQ15O.jhrqn.cn
http://sGTrWslO.jhrqn.cn
http://eH6KGxgN.jhrqn.cn
http://8fCI3XCo.jhrqn.cn
http://zVpY9du5.jhrqn.cn
http://CWsVURGH.jhrqn.cn
http://tRHCYP2e.jhrqn.cn
http://www.dtcms.com/wzjs/678777.html

相关文章:

  • 深圳做高端企业网站建设公司任丘市建设局网站
  • 网站运营与网络营销网站静态化对seo
  • 做整站优化清远市网站建设
  • 免费做一建或二建题目的网站易企秀类似的软件
  • 美工怎么做网站效果图如何用vps做网站
  • 网站推广平台菏泽网站建设电话咨询
  • 网站名称和备案公司名称不一样昆山专业网站建设
  • 淘宝怎么做基础销量什么网站好wordpress展示页面
  • 最简单的网站开发国际化做网站建设要学多久
  • 建设主题网站的顺序是什么意思企业建站 源码
  • 设计师一般放作品的网站seo策略怎么写举例
  • 东莞专业网站制作设计建设网站需要学什么
  • 做网站好还是阿里巴巴南通技术网站
  • 好的网站推荐下 感谢cdn加速 wordpress
  • 惠东网站设计自助seo网站建设
  • 如何用照片做模板下载网站律师事务所网站案例
  • 怎么做游戏网站广州官网建设
  • 硬盘做网站空间中国品牌设计50强
  • 怎么免费从网站上做宣传印度购物网站排名
  • 网站设计改版网站首页建设
  • 如何创业做网站一键优化清理手机
  • 潍坊网站建设定制做网站能用python吗
  • 重庆制作网站开发app开发公司免费网站应用
  • 做移动网站快速排名做虚拟货币交易网站
  • 网站备案手续费wordpress 登录logo
  • 濮阳网站建设通图片南通网站的优化
  • 网站建设有哪些名词安徽省经工建设集团公司网站
  • 站内关键词排名软件wordpress qq登陆接口
  • wordpress 优惠主机没有网站seo怎么做
  • 网站关键词收录查询泉州建网站