当前位置: 首页 > news >正文

北京网站设计确保代码符合w3c南京学习网站建设

北京网站设计确保代码符合w3c,南京学习网站建设,wordpress免费教育机构主题,室内设计师工资TimeStamp 更新操作可能伴随数据冲突#xff0c;我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组#xff08;byte[]#xff09;类型的TimeStamp属性#xff0c;对应到数据表中的rowvewsion类型字段#xff0c;自动监控数据的…TimeStamp 更新操作可能伴随数据冲突我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组byte[]类型的TimeStamp属性对应到数据表中的rowvewsion类型字段自动监控数据的更新操作。 下面通过一个例子来说明 新建一个项目名称为TimeStampDemo新增实体类如下图所示 public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }public int Quantity { get; set; }[Timestamp]public byte[] Timestamp { get; set; }} 上下文代码如下图所示 public class TimeStampModel : DbContext{public TimeStampModel(): base(nameTimeStampModel){}public virtual DbSetProduct Product { get; set; }} 首次运行项目在数据库中生成了如下表结构 下面编写程序来查看其中的Timestamp字段值 static void Main(string[] args) {using (TimeStampModel model new TimeStampModel()){Product product model.Product.Where(p p.Id 1).First();long ts BitConverter.ToInt64(product.Timestamp,0);Console.WriteLine(Quantity:{0} \t Timestamp:{1},product.Quantity,ts);product.Quantity 150;model.SaveChanges();ts BitConverter.ToInt64(product.Timestamp,0);Console.WriteLine(Quantity:{0} \t Timestamp:{1},product.Quantity,ts);Console.ReadKey();} } 运行效果下图所示 可以看到每一次更新数据时EF都会修改Timestamp的值。如果期间有其他程序抢先完成更新造成数据变更那么EF就会报错。 我们重新执行程序在首次出现Timestamp语句时打上断点。然后在SQL查询界面直接更新用SQL语句更新数据 UPDATE dbo.Products SET Quantity 200 WHERE Id 1 SQL执行之前Timestamp的值  SQL执行之后Timestamp的值 可以看到每次更新数据后Timestamp的数值会发生改变 这时继续运行程序就会报错 此信息描述找不到要更新的数据这是因为EF在更新每一项数据时除了主键之外还会对比当时取出的TimeStamp的值。由于我们使用外部SQL更新EF无法检测这个字段就出现报错。 异常DbUpdateConcurrencyException派生自DbUpdateException表示一个并发更新冲突当这个异常出现时显示SaveChanges更新失败通过DbUpdateException.Entries属性可以获取其返回的IEnumerableDbEntityEntry对象其中存取未成功更新的实体数据对象。  重新调整Main方法中的代码如下图所示 static void Main(string[] args) {using (TimeStampModel model new TimeStampModel()){Product product model.Product.Where(p p.Id 1).First();long ts BitConverter.ToInt64(product.Timestamp, 0);Console.WriteLine(Quantity:{0} \t TimeStamp:{1}, product.Quantity, ts);try{Console.WriteLine(新的 Quantity 值);int quantity 500;product.Quantity quantity;model.SaveChanges();ts BitConverter.ToInt64(product.Timestamp, 0);Console.WriteLine(Quantity:{0} \t TimeStamp:{1}, product.Quantity, ts);}catch (DbUpdateConcurrencyException ex){DbEntityEntry entry ex.Entries.Single();DbPropertyValues current entry.CurrentValues;//当前实体数据int quantity current.GetValueint(Quantity);long timestamp BitConverter.ToInt64(current.GetValuebyte[](Timestamp),0);DbPropertyValues dbvalue entry.GetDatabaseValues();//数据库中的实体数据int dbquantity dbvalue.GetValueint(Quantity);long dbtimestamp BitConverter.ToInt64(dbvalue.GetValuebyte[](Timestamp),0);Console.WriteLine(DbUpdateConcurrentException.....);Console.WriteLine(当前实体的属性值 Quantity:{0} \t TimeStamp:{1},quantity,timestamp);Console.WriteLine(数据库中的字段值Quantity:{0} \t TimeStamp:{1},dbquantity,dbtimestamp);}} } 再次在首次出现Timestamp语句时打上断点。然后在SQL查询界面直接更新用SQL语句更新数据后继续运行程序如下图所示 并发冲突处理——Database Wins 或者 Client Wins  处理更新冲突有几种方式想以数据库中的值来覆盖当前数据对象的值则可以调用DbEntityEntry类定义的Reload方法此方法执行的是Database Wins(数据库优先)策略执行完毕之后数据对象当前的值将与数据库同步。 entry.Relaod(); entry.SaveChanges(); 另一种方式则是反向以当前的值覆盖数据库的值称为Clinet  Wins(客户优先)策略。 entry.OriginalValues.SetValues(entry.GetDatabaseValues()); model.SaveChanges() 添加一个ResolveConcurrency方法来支持并发冲突处理 public static void ResolveConcurrency(TimeStampModel model, DbEntityEntry entry) {Console.WriteLine(1.Database wins 2.Client wins:);int i int.Parse(Console.ReadLine());if (i 1){entry.Reload();model.SaveChanges();Console.WriteLine(与数据库同步完成——DataBase Wins);}else{entry.OriginalValues.SetValues(entry.GetDatabaseValues());model.SaveChanges();Console.WriteLine(重新更新数据库完成——Client Wins);} } 将ResolveConcurrency方法插入上述例子的catch语句中并在并发冲突中选择与数据库同步完成结果如下图所示 ConcurrencyCheck注解  TimeStamp注解属性会导致EF在更新时监控整项数据的更新状态如果对特定字段进行数据冲突的监控则可以通过ConcurrencyCheck注解来达到目的。 下面通过程序来说明新建一个控制台应用程序ConcurrencyCheckDemo有如下一个实体类 public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }[ConcurrencyCheck]public int SPrice { get; set; }} 在特价字段(SPrice)设置【ConcurrencyCheck】当程序更新任何一项Product数据时SPrice字段将受到监控期间不受EF监控的程序变更了SPrice字段的值时便会产生冲突。其他字段没有设置因此数据的更新不会有冲突。 在Main函数中增加如下图代码 static void Main(string[] args) {using (ConcurrencyCheckModel db new ConcurrencyCheckModel()){try{Console.WriteLine(指定更新操作:A.商品名称 B.商品特价);string ab Console.ReadLine();if (ab A){Console.WriteLine(输入第一项商品的新名称);string name Console.ReadLine();db.Product.First().Name name;}if (ab B){Console.WriteLine(输入第一项商品的新特价);int price int.Parse(Console.ReadLine());db.Product.First().SPrice price;}Console.WriteLine(按任意键完成更热);Console.ReadKey();db.SaveChanges();Console.WriteLine(完成更新);}catch (Exception ex){Console.WriteLine(ex.ToString());Console.WriteLine(ex.Message);}} } 当修改商品特价时去数据库修改SPrice字段的值便会报错
http://www.sadfv.cn/news/244852/

相关文章:

  • 微网站如何做微信支付宝支付接口做分子生物实验常用网站
  • 哈尔滨网站优化如何常州哪些网站公司做的好
  • 网站建设规划案例江西网站设计电话
  • 网站开发获取用户微信号登录网站开发电话话术
  • 自建网站做淘宝联盟邢台市最新征婚
  • 维护网站是什么意思自助建网站哪个便宜
  • 吉安购物网站制作网站建设制作浩森宇特
  • 哈尔滨企业建站模板四川省建设工程招标网官网
  • 网站评价wordpress 安装语言包
  • 成都做网站的建设部执业资格注册中心网站查询
  • 建网站的优势wordpress+浮动播放器
  • 目前旅游网站开发广告宣传费用一般多少
  • wordpress网站定制客户管理系统 软件
  • 广州网站建设 乐云seo互动营销是什么
  • 做物流哪个网站货源多怎么在互联网做网站
  • 北京市工程建设交易信息网站wordpress能恢复数据库吗
  • 网站建设情况怎么写范文中英网站模板 照明
  • 常德做网站公司中小学生做的网站
  • 深圳深圳网站制作济宁市人才招聘网
  • 宁波网站建设服务公司电话如何用wd做网站设计
  • 无锡大型网站设计公司免费网站建设平台
  • 安康做网站的公司电话做网站如何引用头部
  • 做网站的机构库车县建设网站
  • 哪两个数字域名是做医疗信息网站的济南建设网点电话
  • 网站建设与文字的工作怎么把个人做的网站发布到网上
  • 网站建设 官网哪建网站好
  • 织梦网做网站wordpress 跳转插件
  • 淘宝客网站制作网站推广计划书范文500字
  • 网站网站建设公开发网站用php还是jsp
  • 计算机程序网站开发是什么非标自动化东莞网站建设