首页 > 代码库 > Entity Framework with MySQL 学习笔记一(乐观并发)
Entity Framework with MySQL 学习笔记一(乐观并发)
在做项目时,通常我们对乐观并发有几种处理模式
1. 告诉用户此数据已被其他人捷足先登,更改了。你就算新一下重来吧。
2.直接把数据覆盖上去,我最大。
3.用被人的数据.
这里给出 code first 的做法
[Table("product")][JsonObject(IsReference = true)]public class Product{ [Key] public int id { get; set; } public string code { get; set; } public DateTime dateCreated { get; set; } [ConcurrencyCheck] //关键 public DateTime dateModified { get; set; } public virtual List<Category> categories { get; set; } public virtual List<Color> colors { get; set; }}
MySQL 要有这个column
ALTER TABLE `db`.`product` ADD COLUMN `dateModified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
using (DB db = new DB()){ var product = db.products.Find(1); product.code = "mk99"; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException ex) //DbUpdateConcurrencyException { var objContext = ((IObjectContextAdapter)db).ObjectContext; var entry = ex.Entries.Single(); //objContext.Refresh(RefreshMode.ClientWins, entry.Entity); objContext.Refresh(RefreshMode.StoreWins, entry.Entity); db.SaveChanges(); } }
用DBUpdateConcurrencyException捕获异常,然后我们就可以观察这个entry的种种资料来定义我们的处理。
objContext.Refresh 是微软提供的方案, RefreshMode.StoreWins 就是用当前database的最新数据替换本地数据, ClientWins 就是覆盖本地数据到数据库中啦。
Entity Framework with MySQL 学习笔记一(乐观并发)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。