zoukankan      html  css  js  c++  java
  • EF的乐观并发控制

    1.在数据表中加一列TimeStamp类型的列,

    2.在EDMX中设置改列为Fixed

    典型代码:

    View Code
                catch (OptimisticConcurrencyException cex)
                {
    
                    Debug.WriteLine(DateTime.Now +"冲突错误处理中的TimeStamp");
                    Debug.WriteLine("刷新前:" + BitConverter.ToString((cex.StateEntries[0].Entity as KB_BOMTable).TimeStamp));
                    MessageBox.Show(string.Format("BOM编号:{0},的记录已经被其他用户修改,请确认情况后再做处理!", (cex.StateEntries[0].Entity as KB_BOMTable).BOMId), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    DBCtx.Refresh(System.Data.Objects.RefreshMode.StoreWins, cex.StateEntries[0].Entity);
                    Debug.WriteLine("刷新后:" +BitConverter.ToString((cex.StateEntries[0].Entity as KB_BOMTable).TimeStamp));
                    Debug.WriteLine("会话中:" + BitConverter.ToString((DBCtx.GetObjectByKey(cex.StateEntries[0].EntityKey) as KB_BOMTable).TimeStamp));
    
    
                    object lateEnt;
    
                    DBCtx.TryGetObjectByKey(new EntityKey("JL_MFGEntities.KB_BOMTable", "BOMId", "0002"), out lateEnt);
    
                    Debug.WriteLine(DateTime.Now + ",再次看会话中的TimeStamp");
                    Debug.WriteLine(BitConverter.ToString((lateEnt as KB_BOMTable).TimeStamp));
                    Debug.WriteLine("End<-");
                }

    采用EDMX的方式进行建模,DBCtx.Refresh方法参数一说明

    RefreshMode.StoreWins: StoreWins表示发生并发冲突时按数据库中的取值,来替换当前会话中的对象(DBCtx),TimeStamp列会变成数据库中的取值

    RefreshMode.ClientWins: ClientWins表示发生并发冲突时保留客户端的取值(TimeStamp列不会变),但是Refresh方法实际上会获取数据库中的当前对象对应的记录(Store.TimeStamp),在下次提交该记录时,Store.TimeStamp会用到update更新语句中,而不是使用对象本身的TimeStamp列取值。

  • 相关阅读:
    nested exception is java.io.FileNotFoundException: class path resource [spring-mybatis.xml] cannot be opened
    jdbc批量插入实现大批量数据快速插入
    setInterval设置停止和循环
    在java中使用dom4j解析xml(示例代码)
    获取请求端的ip地址
    行为型之责任链模式
    行为型之策略模式
    行为型之命令模式
    行为型之模板方法模式
    结构型之门面模式
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2549835.html
Copyright © 2011-2022 走看看