`
北极的。鱼
  • 浏览: 159203 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

乐观同步

    博客分类:
  • C#
 
阅读更多
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(int? id, byte[] rowVersion)
{
    string[] fieldsToBind = new string[] { "Name", "Budget", "StartDate", "InstructorID", "RowVersion" };
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    var departmentToUpdate = await db.Departments.FindAsync(id);
    if (departmentToUpdate == null)
    {
        Department deletedDepartment = new Department();
        TryUpdateModel(deletedDepartment, fieldsToBind);
        ModelState.AddModelError(string.Empty, "Unable to save changes, the department was deleted by another user");
        ViewBag.InstructorID = new SelectList(db.Instructors, "ID", "FullName", deletedDepartment.InstructorID);
        return View(deletedDepartment);
    }
    if (TryUpdateModel(departmentToUpdate, fieldsToBind))
    {
        try
        {
            db.Entry(departmentToUpdate).OriginalValues["RowVersion"] = rowVersion;
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }
        catch (DbUpdateConcurrencyException ex)
        {
            var entry = ex.Entries.Single();
            var clientValues = (Department)entry.Entity;
            var databaseEntry = entry.GetDatabaseValues();
            if (databaseEntry == null)
            {
                ModelState.AddModelError(string.Empty, "无法保持更改,系已被其他用户删除");
            }
            else
            {
                var databaseValues = (Department)databaseEntry.ToObject();
                if (databaseValues.Name != clientValues.Name)
                {
                    ModelState.AddModelError("Name", "当前值:" + databaseValues.Name);
                }
                if (databaseValues.Budget != clientValues.Budget)
                {
                    ModelState.AddModelError("Budget", "当前值:" + databaseValues.Budget);
                }
                if (databaseValues.StartDate != clientValues.StartDate)
                {
                    ModelState.AddModelError("StartDate", "当前值:" + databaseValues.StartDate);
                }
                if (databaseValues.InstructorID != clientValues.InstructorID)
                {
                    ModelState.AddModelError("InstructorID", "当前值:" + db.Instructors.Find(databaseValues.InstructorID).FullName);
                }
                ModelState.AddModelError(string.Empty, "当前记录已经被其他人更改,如果你仍要保存这些数据,重新点击保持按钮或点击返回列表撤销本次操作");
                departmentToUpdate.RowVersion = databaseValues.RowVersion;
            }
        }
        catch (RetryLimitExceededException)
        {
            ModelState.AddModelError(string.Empty, "无法保持更改");
        }
    }
    ViewBag.InstructorID = new SelectList(db.Instructors, "ID", "FullName", departmentToUpdate.InstructorID);
    return View(departmentToUpdate);
}

 

分享到:
评论

相关推荐

    论文研究-网络交通分布式模拟乐观同步算法研究.pdf

    论文研究-网络交通分布式模拟乐观同步算法研究.pdf, 基于分布式网络环境,运用并行模拟领域的最新研究成果,对路网交通流分面式并行模拟中如何实现处理内部的时钟同步...

    论文研究-POSE中乐观同步策略研究.pdf

    眉毛图像的分割,由于受到毛发、姿势及个体差异的影响,是一个非常困难的问题。提出了一种利用半监督学习技术进行彩色眉毛图像分割的方法,首先通过手工在眉毛图像上简单画上几条线标注部分眉毛点和非眉毛点,然后...

    node+js页面乐观锁帧同步示例源码

    在这个“node+js页面乐观锁帧同步示例源码”中,我们可以看到一个结合Node.js和JavaScript实现的乐观锁应用。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者可以使用JavaScript在服务器端编写代码...

    GPUTW:基于GPU的离散事件模拟引擎,支持保守和乐观同步,可逆随机数生成和参数自动调整。 发布:https:dl.acm.orgdoi10.11453064911.3064912

    而乐观同步则更注重效率,它允许一定的误差容忍度,从而在牺牲部分精确性的同时,换取更高的执行速度,适用于大规模模拟和实时响应的场合。 GPUTW的一大创新点在于可逆随机数生成。传统的随机数生成器通常只能向前...

    并行与分布式仿真时间推进同步机制综述.pdf

    3. **混合机制(Hybrid Synchronization)**:混合机制结合了保守和乐观两种机制的优点,通常在早期阶段采用乐观同步以加速仿真,当冲突出现时切换至保守同步以保证正确性。这种方式试图在性能和正确性之间找到平衡...

    论文研究-基于抗体浓度和亲合度的关联规则挖掘算法.pdf

    剖析了POSE框架中的乐观同步策略,按照时间窗口调整状况将其自适应策略分为半自适应策略和完全自适应策略;对自适应乐观同步策略的模拟速度与精度进行了深入的测试比较,发现经过调整半自适应乐观策略能够取得更好的...

    分布式系统环境下一种读写同步控制模型的实现.pdf

    例如,可以进一步优化模型以适应更大规模的分布式环境,或者探索与其他同步机制(如乐观同步、悲观同步等)的结合,以适应不同应用场景的需求。 通过阅读本文,可以对分布式系统中读写同步控制的理解有更深入的认识...

    ampersand-optimistic-sync:Backbone.sync和&符同步的包装器,自从

    &乐观同步Backbone.sync和&符同步的包装器,通过HTTP实现乐观并发。 不确定什么是乐观并发? 如何使用?默认行为对于默认行为,只需像这样扩展: var Model = require ( 'ampersand-model' ) ; // or require('...

    并行与分布式仿真时间推进同步机制综述

    根据不同的原理和技术特点,时间推进同步机制可以分为四类基本类型:保守机制、乐观机制、混合机制和自适应机制。 ##### 1. 保守机制 **定义与原理**:保守机制是一种确保在所有逻辑进程(LP)之间没有潜在交互的...

    分布式数据库同步论文

    ### 分布式数据库同步知识点详解 #### 一、引言 在分布式数据库系统(Distributed Database Management System, DDBMS)中,数据被分布在网络中的多个计算机上,这些计算机通过网络进行通信。为了确保数据的一致性...

    2015七年级政治下册 第1单元 第3课《乐观向上》同步练习3 北师大版

    《乐观向上》这篇内容主要涉及的是心理素质和态度在个人成长与应对困难中的重要性,尤其针对青少年的成长教育。文章通过贝多芬和张海迪的例子,展示了即使面临逆境,乐观积极的心态如何帮助人们转化为动力,持续为...

    基于java开发的功能强大、配置灵活的数据库之间的同步工具

    4. 锁与并发控制:在多线程环境下,数据同步需要考虑并发问题,可能需要使用数据库级别的锁或者乐观锁策略,防止数据冲突。 5. 错误处理与回滚:在数据同步过程中,可能会遇到各种错误,如网络中断、数据不一致等,...

    查看同步的服务器页面

    数据库管理系统提供了事务处理、乐观锁、悲观锁等机制来保证同步。 4. **分布式系统同步**:在多服务器环境下,为了保持各个节点的数据一致,需要使用分布式协调服务,如Zookeeper、etcd或Consul,它们提供锁服务、...

    2015七年级政治下册 第1单元 第3课《乐观向上》同步练习1 北师大版

    这篇资料主要围绕七年级政治课程中的《乐观向上》这一主题,通过选择题和材料分析题的形式,探讨了乐观心态在面对困难和挫折时的重要性。以下是根据题目内容提炼出的相关知识点: 1. **乐观心态的定义**:乐观者...

    面试必备之乐观锁与悲观锁.pdf

    CAS算法则在无锁的情况下实现变量同步,对于冲突不频繁的情况,使用CAS可以进一步减少线程等待的开销,提高效率。 然而,乐观锁也存在一定的缺点。最为人熟知的是ABA问题,即变量的值由A变为B再变回A,而基于CAS...

    java分布式数据库同步系统(解决中美异地机房).rar

    例如,两个节点同时修改同一数据,解决冲突的方法有:时间戳、乐观锁、悲观锁等。 8. Java中间件:如Apache Kafka、RabbitMQ等消息队列可以作为数据同步的载体,提供高吞吐量、低延迟的消息传递。 9. 监控与报警:...

    文件上传及数据同步工具demo

    3. **版本控制**:为了处理多客户端同时修改同一数据的情况,通常需要实现版本控制,例如乐观锁或悲观锁机制。 4. **增量同步**:只有当数据发生改变时才进行同步,可以显著提高效率。这需要跟踪和比较数据的变化,...

    Java画图板,支持网络同步

    为了保证数据的一致性,可能还用到了版本控制或并发控制机制,如乐观锁或悲观锁。 在代码实现上,开发者可能创建了一个`JFrame`作为主窗口,包含一个`JPanel`作为画布,使用`Graphics2D`对象进行绘图。`Graphics2D`...

    Java并发篇乐观锁,悲观锁,自旋锁

    本文主要讨论了四种锁类型:乐观锁、悲观锁、自旋锁以及Java中的synchronized同步锁,并深入解析了synchronized锁的内部机制,包括其核心组件、实现方式以及锁的状态。 1. **乐观锁**:乐观锁假设在多线程环境下,...

Global site tag (gtag.js) - Google Analytics