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" } })
EF 数据版本号,处理具体使用方法 RowVersion / Timestamp 使用方法。进行自动处理并发修改的更多相关文章
- EF数据迁移
在项目中使用Entity Framework的Code First模式,进行数据迁移时,Migration文件夹中存放的是每一次Entity的修改如何同步到数据的操作方法,每个文件中都只有Up和Dow ...
- EntityFrameWork简单操作 EF数据上下文对象操作数据增删改差及批处理
/// <summary> /// EF针对 留言数据库 的 数据上下文对象!!!! /// </summary> static LeaveWordBoradEntities ...
- 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)
文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...
- 开放数据接口 API 简介与使用场景、调用方法
此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...
- vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表
vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...
- 9.10 翻译系列:EF数据注解特性之StringLength【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/stringlength-dataannotations-attribute-in-co ...
- 9.7 翻译系列:EF数据注解特性之--InverseProperty【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in ...
- python - 数据描述符(class 内置 get/set/delete方法 )
数据描述符(class 内置 get/set/del方法 ): # 什么是描述符 # 官方的定义:描述符是一种具有“捆绑行为”的对象属性.访问(获取.设置和删除)它的属性时,实际是调用特殊的方法(_g ...
- 获取器操作都是针对数据而不是数据集的,要通过append()方法添加数据表不存在的字段
获取器操作都是针对数据而不是数据集的,要通过append()方法添加数据表不存在的字段 public function getMembership(){ //加入会员s_id = 1 $busines ...
随机推荐
- push to origin/master was rejected错误解决方案
idea中,发布项目到OSChina的Git中,当时按照这样的流程添加Git,然后push,提示:push to origin/master war rejected". 解决方案如下: 1 ...
- 查看mysql库中所有表的信息--INFORMATION_SCHEMA
第一个查询看看库里有多少个表,表名等select * from INFORMATION_SCHEMA.TABLES information_schema这张数据表保存了MySQL服务器所有数据库的信息 ...
- headless&unittest
为什么要使用 headless 测试? headless broswer 可以给测试带来显著好处: 对于 UI 自动化测试,少了真实浏览器加载 css,js 以及渲染页面的工作.无头测试要比真实浏览器 ...
- 用VS制作的windows服务安装包 安装完后如何让服务自动启动
vs 服务做成安装包,如何安装以后启动服务,只要在类名为projectinstaller的类中重写commit事件即可 public override void Commit(IDic ...
- Confluence 6 删除垃圾内容
属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL. 如果你有很多垃圾用户在你的系统中创建了属性,你可以使 ...
- Confluence 6 配置草稿保存的时间
这个设置仅仅应用到 Confluence 6.0 及后续版本中,如果你选择 禁用(disable )collaborative editing. 当协同编辑被启用后,我们将会保存所有的修改. 当协同编 ...
- (七)STL适配器
1.适配器是稍微修改某些功能,比如三个参数改为两个参数,函数的名称改一下等等,可以出现在容器.迭代器和仿函数中. 2.适配器相当于对某个东西进行封装,例如A是B的适配器,则真正的功能实现是在B中,可以 ...
- Android UiAutomator - CTS Frame
使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...
- python - 发送带各种类型附件的邮件
如何发送各种类型的附件. 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分.如果是附件,则add_header加入附件的声明. 在python中,M ...
- LeetCode(118):杨辉三角
Easy! 题目描述: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1] ...