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列取值。

  • 相关阅读:
    【ssh】端口转发
    【python】ftp连接,主被动,调试等级
    【ftp】主动模式和被动模式
    【python】声明编码的格式
    【python】gearman阻塞非阻塞,同步/异步,状态
    【mongo】centos6.9安装mongo2.6.3
    线性代数
    Improved GAN
    GAN (Generative Adversarial Network)
    Scaled Exponential Linear Unit
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2549835.html
Copyright © 2011-2022 走看看