数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件亚洲最佳在线娱乐平台开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程亚洲最佳在线娱乐平台工具网络安全软件教学vbscript正则表达式javascript批处理更多»亚洲最佳在线娱乐平台更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发亚洲最佳在线娱乐平台服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件亚洲最佳在线娱乐平台开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

澳门银河app安全吗免费彩金无需申请

来源:乐虎lehu国际娱乐之家  责任编辑:小易  

本文介绍如何处理多个用户并发更新同一实 体(同时)时出现的冲突 。

主要是两种:一种,检查属性并发冲突,使用 [ConcurrencyCheck] ;另一种,检测行的并发冲突,使用 rowversion 跟踪属性,如果在保存之前有修改,就报错

发生并发冲突的情况:

1.用户导航到实体编辑页面;

2.第一个用户的更改还未写入亚洲最佳在线娱乐平台之前,另一个用户更新同一实体;

此时,如果未启用并发检测,当发生更新时:

最后一个更新优先。即最后一个更新的值保存到亚洲最佳在线娱乐平台。而第一个保存的值将丢失。

举个例子:

1. Jane 访问 院系 编辑页 面,将英 语 系的 预 算 从 350,000.00 美元更改 为 0.00 美元 (第一个用户把金额改为0)

2. 在 Jane 单击 “ 保存 ” 之前, John 访问 了相同 页 面,并将开始日期字段从 2007/1/9 更改 为 2013/1/9。 (在第一个用户保存之前,第二个用户把时间从07年改为13年,注意此时第二个用户看到的金额还不是0)

3. Jane 先 单击 “ 保存 ” ,并在 浏览 器 显 示索引 页时 看到她的更改。 (第一个用户先保存,并且可以在浏览器看到他的修改,金额变0,时间不变)

4.John 单击 “ 编辑 ” 页 面上的 “ 保存 ” ,但 页 面的 预 算仍 显 示 为 350,000.00 美元。 (第二个用户保存,此时的页面的预算显示未350000美元,时间为13年)

其实这个结果取决于 并发冲突的处理方式

首先声明,这是一个乐观并发冲突,那么什么是乐观并发冲突呢?

乐观并发冲突允许发生并发冲突,并在并发冲突发生时作出正确的反映。

说了这么多,那么,并发冲突的处理方式呢?

1. 可以跟踪用户已修改的属性,并只更新亚洲最佳在线娱乐平台中相应的列。

这样,当两个用户更新了不同的属性,下次查看时,都将生效。

但是,这种方法,也有一些问题:

  • 当对同一个属性进行竞争性更改的话,无法避免数据丢失
  • 通常不适用于web应用。它需要维持重要状态,以便跟踪所有提取值和新值。 维持大量状态可能影响应用性能。
  • 可能会增加应用复杂性(与实体上的并发检测相比)。

体现在例子中,就是如果 下次有人 浏览 英 语 系 时 ,将看到 Jane 和 John 两个人的更改。

2.客户端优先

即客户端的值优先于亚洲最佳在线娱乐平台存储的值。并且如果不对并发处理进行任何编码,将自动进行客户端优先

即John 的更改覆盖 Jane 的更改 。也就是说,下次有人 浏览 英 语 系 时 ,将看到 2013/9/1 和提取的 值 350,000.00 美元

3.存储优先

这种方式可以阻止在亚洲最佳在线娱乐平台中John的更改。并且可以

  • 显示错误消息
  • 显示数据的当前状态
  • 允许用户重新应用更改。

处理并发

当属性配置 为 并 发 令牌 时 : 

亚洲最佳在线娱乐平台和数据模型必须配置为支持引发DbUpdateConcurrencyException 。

检测属性的并发冲突

可使用 ConcurrencyCheck 特性在属性级别检测并发冲突。 该特性可应用于模型上的多个属性 。[ConcurrencyCheck] 特性

检测行的并发冲突

要检测并发冲突,请将 rowversion 跟踪列添加到模型。

注意:rowversion , 

1.它是 SQL Server 特定的。 其他亚洲最佳在线娱乐平台可能无法提供类似功能。

2.用于确定从亚洲最佳在线娱乐平台提取实体后未更改实体。

亚洲最佳在线娱乐平台生成rowversion序号,该数字随着每次行的更新递增。

在 update 或 delete 命令中,where 子句中包括 rowversion提取值 的判断 。

如果要更新的行已经修改,则 rowversion提取值与现在亚洲最佳在线娱乐平台中rowversion的值不匹配;

update 或 delete 命令不能找到行。引发一个 DbUpdateConcurrencyException 异常

例子

向 Department 实 体添加跟踪属性

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ContosoUniversity.Models
{
public class Department
{
public int DepartmentID { get; set; }
[StringLength(50, MinimumLength = 3)]
public string Name { get; set; }
[DataType(DataType.Currency)]
[Column(TypeName = "money")]
public decimal Budget { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Start Date")]
public DateTime StartDate { get; set; }
public int? InstructorID { get; set; }

[Timestamp]
public byte[] RowVersion { get; set; } //跟踪属性

public Instructor Administrator { get; set; }
public ICollection<Course> Courses { get; set; }
}
}

Timestamp 特性 指定此列包含在 update 和 delete 命令的 where 子句中。

也可以用 Fluent API 指定跟踪属性:

modelBuilder.Entity<Department>()
.Property<byte[]>("RowVersion")
.IsRowVersion();

以下代 码显 示更新 Department 名称 时 由 EF Core 生成的部分 T-SQL :

SET NOCOUNT ON;

UPDATE [Department] SET [Name] = @p0
WHERE [DepartmentID] = @p1 AND [RowVersion] = @p2;

SELECT [RowVersion]
FROM [Department]
WHERE @@ROWCOUNT = 1 AND [DepartmentID] = @p1;

前面的 代 码显 示包含 RowVersion 的 WHERE 子句。 如果数据 库 RowVersion 不等于 RowVersion 参数( @p2
), 则 不更新行。

@@ROWCOUNT 返回受上一 语 句影响的行数。 在没有行更新的情况下, EF Core 引 发
DbUpdateConcurrencyException

此文主要是为了方便自己记录学习,如有错误,欢迎指正

这里附上参考资料:

https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/concurrency?view=aspnetcore-2.2&tabs=visual-studio

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持乐虎lehu国际娱乐之家。

  • EF Core 验证提取属性后是否未更改属性。 调用 SaveChanges 或 SaveChangesAsync 时会执行此检查。
  • 如果提取属性后更改了属性,将引发 DbUpdateConcurrencyException。

您可能感兴趣的文章:


  • 本文相关:
  • asp.net开发与web标准的冲突问题的一些常见解决方法
  • 在asp.net 2.0中操作数据之四十八:对sqldatasource控件使用开放式并发
  • 在asp.net 2.0中操作数据之二十一:实现开放式并发
  • 让win2008+iis7+asp.net支持10万并发请求
  • asp.net log4net的使用方法
  • .net中rdlc循环处理数据的应用分析
  • asp.net webapi与ajax进行跨域数据交互时cookies数据的传递
  • asp.net the system cannot find the file specified解决办法
  • discuz!nt 源文件变成乱码的解决方法
  • asp.net中实现弹出日历示例
  • 简单几步 实现vs2010对html5的支持
  • 基于.net bitmapimage 内存释放问题的解决方法详解
  • 关于c#连接ftp进行上传下载实现原理及代码
  • wpf实现进度条实时更新效果
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.pradaoutletonline.net All Rights Reserved