zoukankan      html  css  js  c++  java
  • EF 数据版本号,处理具体使用方法 RowVersion / Timestamp 使用方法。进行自动处理并发修改

            /*
             * <div class="form-group">          // 原始
             * <div class="form-group hidden">   // 修改后
             * 
             * 
             *  原始:  @Html.EditorFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })
             *  修改后:@Html.HiddenFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })
             */

    生成的页面,进行替换操作。同样适用于 Timestamp

            /// <summary>
            /// 数据行版本号
            /// </summary>
            [Display(Name ="数据行版本号")]
            [Timestamp]
            public byte[] RowVersion { get; set; }

            /// <summary>
            /// 数据行版本号
            /// </summary>
            [Display(Name ="数据行版本号")]
            [Timestamp]
            public byte[] Timestamp { get; set; }

    如果发生异常,表示版本不一至。

    如:

            #region 修改数据时,如果行版本不一至,则报错,内容为:数据版本不一至,请返回重新进入再修改!
            private static readonly Exception _DbUpdateConcurrencyException = new Exception("数据版本不一至,请返回重新进入再修改!");
            /// <summary>
            /// 修改数据时,如果行版本不一至,则报错,内容为:数据版本不一至,请返回重新进入再修改!
            /// </summary>
            public static Exception DbUpdateConcurrencyException { get { return _DbUpdateConcurrencyException; } }
    
            private static readonly Exception _OptimisticConcurrencyException = new Exception("未设置行版本!");
            /// <summary>
            /// 未设置行版本!当更新操作违反并发约束时,就会引发此异常。
            /// </summary>
            public static Exception OptimisticConcurrencyException { get { return _OptimisticConcurrencyException; } }
            #endregion
    
    
    
            public override async Task<int> SaveChangesAsync()
            {
                try
                {
                    int result = await base.SaveChangesAsync();
                    return result;
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw RowVersionHelper.DbUpdateConcurrencyException;
                }
                catch (OptimisticConcurrencyException)
                {
                    throw RowVersionHelper.OptimisticConcurrencyException;
                }
            }

     可以处理这个异常,进行自定义处理以给用户弹出友好提示。

    <div class="form-group">          // 原始
    <div class="form-group hidden">   // 修改后
    原始:  @Html.EditorFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })
    修改后:@Html.HiddenFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })

  • 相关阅读:
    Android开发中适配多种 ROM 的快捷方式是如何实现的?
    Android开发利用Volley框架下载和缓存网络图片
    Android调用系统相机、自定义相机、处理大图片
    Excel中MATCH函数的正确使用
    Excel中INDEX函数的使用
    (转)Delphi2009初体验
    利用NSA的MS17-010漏洞利用工具实现Win 7和Win Server 2008系统入侵
    delphi 的结构体对齐关键字
    KVM虚拟化(一)—— 介绍与简单使用
    kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
  • 原文地址:https://www.cnblogs.com/webenh/p/7919500.html
Copyright © 2011-2022 走看看