MVC-07 案例1
生活随笔
收集整理的这篇文章主要介绍了
MVC-07 案例1
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
>>>>>ContosoUniversity网站
-------------------------------------------
一、并发冲突
1. 为什么会并发冲突?
l并发冲突的例子 •假设你想在网上订机票。查询你的航班,发现还有座位,但是当你单击预订按钮时,系统提示机票已售罄。如果再次查询该航班,发现已经没有座位了。这是怎么回事呢?原来是在你查询到结果和预订之间,其他人预订了最后一张票。系统对最后一张票进行了并发查询,如果没有并发检查,该航班的机票就会超额预订。 从技术上来说,程序中的每个可编辑的实体都存在争用的情况。但是在现实世界中,有非常少的数据受到争用,常常不是太重要而不值得并发检查。 •例如,订单?
客户和供应商?
产品的价格和库存量?
l并发更新、并发删除 l数据库是共享式的。 l对同一资源的访问,造成并发冲突,数据意外丢失。2. 并发冲突的类型?
(1)悲观并发控制(Pessimistic Concurrency) 以独占方式物理锁定数据库中的数据,当数据被锁定,其他用户就不能再访问它了,读取或更新都不行,直到数据被更新或者解除锁定。 ü好处是它允许单个用户以独占方式访问信息,消除了任何可能的争用。 ü但从性能和使用上来说以独占方式锁定会产生很多并发症状。—影响他人效率
—如果程序奔溃
悲观并发背后的理念是因为数据可能存在争用,数据由第一个读取者锁定。解决并发问题的另一个技术是反其道而行之:因为数据并不频繁争用,锁定数据是没有意义的,我们让争用检查只在更新阶段执行。
(2)乐观并发控制(Optimistic Concurrency) •允许冲突发生,设置相应的处理机制或通知用户。 •当更新数据库时,必须检查自从检索了数据起它就没有发生变化。 •对系部信息的编辑,如果预算原来为3500,John修改为0;在John按保存之前,Jane更改了系建立日期从2007年9月1日到2013年8月8日。冲突产生。。。 ü处理方法:—跟踪用户已修改的属性,只更新数据库中的相应的列。两个人的修改都保存到数据库。
—客户端赢或最后一个赢。Jane的更改覆盖John的更改。不需要编码,自动发生。
—存储区赢。John的更改覆盖Jane的更改。我们即将讲解如何实现。
乐观并发提升了系统的可扩展性和可使用性,因为数据总是可读取的。主要的缺点是除非你写一些复杂的代码,否则得到并发异常的用户必须重新读取更新数据,然后应用修改。通常浪费的时间是可接受的,有时不是。
检测并发冲突
l通过引发OptimisticConcurrencyException异常处理来解决冲突。 •为每一行的修改添加一个版本控制列。在并发修改的情况下,第一个保存的数据成功,其他的就不能更新数据,因为自从读取了数据,版本已经发生了变化。 •在Update和Delete命令的Where子句中,检查版本。 二、Lazy、 Eager,和Explicit加载的相关数据(1)Lazy loading
- 实体读取时,并不加载数据,使用时加载数据。掌握代码。熟记样例代码。
(2)Eager Loading
- 实体读取时,获取相关数据。熟记样例代码。
(3)Explicit Loading
l实体读取时,获取相关数据。熟记样例代码。 三、请为ContosoUniversity网站设计类图,并编写教师类、学生类、课程类、选课类的代码。转载于:https://www.cnblogs.com/meetyy/p/3483106.html
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的MVC-07 案例1的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: hibernate小记
- 下一篇: MVC3入门教程