MVC3+EF4.1学习系列(七)-----EF并发的处理
看这篇文章之前 推荐园子里的 这个文章已经有介绍了 而且写的很好~~ 可以先看下他的 再看我的
并发
1.悲观并发
简单的说 就是一个用户访问一条数据时 则把这个数据变为只读属性 把该数据变为独占 只有该用户释放了这条数据 其他用户才能修改 这期间如果该用户上个厕所 出去玩一圈 没有退出 则其他人都要等很久 很显然 这不是我们期望的效果 也不是这篇文章讨论的重点
2.乐观并发
乐观并发相对悲观并发,用户读取数据时不锁定数据。当一个用户更新数据时,系统将进行检查,查看该用户读取数据后其他用户是否又更改了该数据。如果其他用户更新了数据,将产生一个错误。这也是这篇文章主要讲的。
如何让EF实现乐观并发呢 其实很简单 只用简单三部就可以打造乐观并发了~
以院系类为例子
第一步 . 给实体类添加 一个时间戳
[Timestamp]
public Byte[] Timestamp { get; set; }
第二步,在我们的院系编辑视图里 加上
@Html.HiddenFor(model => model.Timestamp)
也就是说 在读取的时候 把这个时间戳读取出来
第三步,捕获并发异常给用户一个友好的提示

[HttpPost]
public ActionResult Edit(Department department)
{
try
{ if (ModelState.IsValid)
{
db.Entry(department).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
ModelState.AddModelError(string.Empty, "友好的提示");
}
}

好了 这时可以如果有 如下情况 一个用户打开编辑院系 另一个也打开了编辑院系 当一个提交后 另一个再提交 则会提示出 友好的提示 告诉他 数据已经变更了~~
3.思考
并发管理 虽然实现了 EF帮我做了 但是我们不应该只局限与实现 要去想想中间给了我们哪些启发
打开SQL监控 开开更新时 EF帮我们做了哪些操作

exec sp_executesql N'update [dbo].[Department]
set [Name] = @0, [Budget] = @1, [StartDate] = @2, [InstructorID] = @3
where (([DepartmentID] = @4) and ([Timestamp] = @5))
select [Timestamp]
from [dbo].[Department]
where @@ROWCOUNT > 0 and [DepartmentID] = @4',N'@0 nvarchar(50),@1 decimal(19,4),@2 datetime,@3 int,@4 int,@5 binary(8)',@0=N'WLF',@1=10000.0000,@2='09 1 2007 12:00:00:000AM',@3=3,@4=3,@5=0x00000000000007D9

我们看到 更新后 查询Timestamp
于是 个人猜想 不见得对 过程应该是这样的
用户读取 这条数据时 读取到他的 Timestamp 然后更新时 检测则个和上次是否一样 不一样 说明有人刚才更新过了 这个方法 我们在用ado.net时 同样可以用到~~
细心的朋友会发现 上面的SQL语句更新时 并没有更新 Timestamp 啊
这里再说下这个 timestamp
每个数据库都有一个计数器,当对数据库中包含 timestamp 列的表执行插入或更新操作时,该计数器值就会增加。 该计数器是数据库时间戳。 这可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间。 一个表只能有一个timestamp 列。 每次修改或插入包含 timestamp 列的行时,就会在 timestamp 列中插入增量数据库时间戳值。
详见 MSDN------原文
总结
学习应该多去思想 了解原理 才能破而后立 ~~
下一节 EF处理继承
MVC3+EF4.1学习系列(七)-----EF并发的处理的更多相关文章
- MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
文章索引和简介 通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决 这篇就来写如何查找导航属性 和查找导航属性的几种 ...
- MVC3+EF4.1学习系列(四)----- ORM关系的处理
上篇文章 终于把基础的一些操作写完了 但是这些都是单表的处理 而EF做为一个ORM框架 就必须点说说对于关系的处理 处理好关系 才能灵活的运用EF 关于关系的处理 一般就是 一对一 一对多 ...
- MVC3+EF4.1学习系列(十)----MVC+EF处理树形结构
通过前几篇文章 我们处理了 一对一, 一对多,多对多关系 很好的发挥了ORM框架的做用 但是 少说了一种 树形结构的处理, 而这种树形关系 我们也经常遇到,常见的N级类别的处理, 以及经常有数据与类别 ...
- MVC3+EF4.1学习系列(十一)----EF4.1常见的问题解决
博客写了10篇了~有很多朋友私信问了一些问题,而且很多问题 大家问的都一样 这里说说这些常见问题的解决办法.如果大家有更好的解决办法~也希望分享出来 问题大概为这几个 一.ef4.1 codeFirs ...
- MVC3+EF4.1学习系列(一)-------创建EF4.1 code first的第一个实例
基于EF4.1 code first 简单的CRUD 园子中已经有很多了 ~~ 真不想再写这个了 可是为了做一个完整的小demo 从开始 到后面的一些简单重构 还是决定认真把这个写出来 争取写些别人 ...
- MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化
上篇文章中 我们已经创建了EF4.1基于code first的例子 有了数据库 并初始化了一些数据 今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建 ...
- MVC3+EF4.1学习系列(六)-----导航属性数据更新的处理
通过上一篇的学习 我们已经知道怎么查询关系 这篇就来说说怎么导航属性数据更新时的处理 以及EF又会为我们生成哪些SQL~ 老规矩 先看下今天的图 添加和修改页面基本就是这样 这节的内容相对简单~~ 主 ...
- MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用
上节通过一系列重构 简单的项目就实现了 不过还有些EF的功能没有讲 这节就通过项目 讲讲EF其他的功能与技巧 一.直接执行SQL语句 通常来讲 EF 不用写SQL语句的 但是 在有些场合 比如对生 ...
- MVC3+EF4.1学习系列(三)-----排序 刷选 以及分页
上篇文章 已经做出了基本的增删改查 但这远远不足以应付实际的项目 今天讲下实际项目中 肯定会有的 排序 刷选 以及分页. 重点想多写点分页的 毕竟这个是任何时候都要有的 而且 我会尽量把这个 ...
随机推荐
- Jstatd方式远程监控Linux下 JVM运行情况
前言 最近一个项目部署在服务器上运行时出现了问题,经过排查发现是java内存溢出的问题,所以为了实时监控服务器java内存的情况,需要远程查看服务器上JVM内存的一些情况.另外服务器系统是CentOS ...
- 【 VS 插件开发 】一、正确安装VS专业版
[ VS 插件开发 ]一.正确安装VS专业版
- 《C++反汇编与逆向分析技术揭秘》——观察各种表达式的求值过程
---恢复内容开始--- 加法: 示例: 常量相加,则在编译期间就计算出两个常量相加后的结果,直接将这个结果参与运算,减少了运行期的计算.当有变量参与运算时,会先取出内存中的数据,放入通用寄存器中,再 ...
- Ddos 攻击
title: Ddos 防御相关 tags: Ddos, 安全, 防御 grammar_cjkRuby: true --- 防御基础 1.1. 攻击流量到底多大 谈到DDoS防御,首先就是要知道到底遭 ...
- MSSQL2008 中文乱码问题 (引自ljg888的专栏)
PHP向MSSQL2008中写入数据,中文乱码 首先:查看SQLserver编码格式的SQL语句为: SELECT COLLATIONPROPERTY('Chinese_PRC_Stro ...
- centos php 扩展安装
1. 安装mysqli扩展 1.进入php源代码目录:# cd /home/apps/web/php/php-5.3.5/ 2.再进入要添加的mysqli扩展源码目录:# cd ext/mysqli/ ...
- sql第二天
--基本格式 select * from tblclass --对于列进行限制 --格式一:取指定列 select cid,cname from TblClass select cname from ...
- mac上设置sudo不要密码
觉得每次sudo都需要设置密码太过麻烦,于是折腾了一番,谁知走了一番弯路记录下来. 以下是网上找到的步骤 chmod u+w /etc/sudoers 给当前用户增加写权限 vi /etc/sudo ...
- svn is already locked解决办法
在出错文件夹下,鼠标右键
- xampp版本和具体的php,mysql版本的对应
在国外网上查找到具体的xampp版本与php,mysql版本的对应关系,特此记录.以便需要的人使用.原文链接如下: http://code.stephenmorley.org/articles/xam ...