星空网 > 软件开发 > ASP.net

数据注解特性之ConcurrencyCheck特性【Code

ConcurrencyCheck特性可以应用到领域类的属性中。当EF执行更新操作的时候,Code-First将列的值放在where条件语句中,你可以使用这个CurrencyCheck特性,使用已经存在的列做并发检查,而不是使用单独的TimeStamp列来做并发检查。

数据注解特性之ConcurrencyCheck特性【Code

看下面的代码:

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EF2{  [Table("StudentInfo")]  public class Student  {    [Key]    [Column(Order=1)]    public int StudentKey1 { get; set; }    [Key]    [Column(Order=2)]    public int StudentKey2 { get; set; }    [Column("Name",TypeName="ntext")]    [MaxLength(20)]    [ConcurrencyCheck]    public string StudentName { get; set; }    [NotMapped()]    public int? Age { get; set; }    public int StdId { get; set; }    [ForeignKey("StdId")]    public virtual Standard Standard { get; set; }    [Timestamp]    public byte[] RowVersion { get; set; }  }}

然后我们来修改一下Main函数测试的代码:

using System;using System.Collections.Generic;using System.Data.Entity;using System.Data.Entity.Infrastructure;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EF2{  class Program  {    static void Main(string[] args)    {      Student stuModel1 = null;      Student stuModel2 = null;        using (var db = new DbContextClass())        {          stuModel1 = db.Students.Where(s => s.StudentKey1 == 1 && s.StudentKey2 == 1).Single();        }        using (var db = new DbContextClass())        {          stuModel2 = db.Students.Where(s => s.StudentKey1 == 1 && s.StudentKey2 == 1).Single();        }        stuModel1.StudentName = "Test Only For one";        stuModel2.StudentName = "Test Only For twos";        try        {          using (var db = new DbContextClass())          {            db.Entry(stuModel1).State = EntityState.Modified;            db.SaveChanges();          }        }        catch (DbUpdateConcurrencyException ex)        {          Console.WriteLine(ex.Message);        }        try        {          using (var db = new DbContextClass())          {            db.Entry(stuModel2).State = EntityState.Modified;            db.SaveChanges();          }        }        catch (DbUpdateConcurrencyException ex)        {          Console.WriteLine(ex.Message);        }      Console.ReadKey();    }  }}

然后错误并发消息是:

数据注解特性之ConcurrencyCheck特性【Code

 

exec sp_executesql N'UPDATE [dbo].[StudentInfo]SET [StudentName] = @0, [StdId] = @1WHERE ((([StudentKey1] = @2) AND ([StudentKey2] = @3)) AND ([StudentName] = @4))',N'@0 nvarchar(20),@1 int,@2 int,@3 int,@4 nvarchar(20)',@0=N'Test Only For one',@1=1,@2=1,@3=1,@4=N'Test Only For one'

请注意:

Note that TimeStamp attribute can only be applied to a single byte array property in a class, whereas ConcurrencyCheck attribute can be applied to any number of properties with any datatype.

TimeStamp特性只能够被用到单字节属性的类中,但是ConcurrencyCheck特性可以被用到任何数量,任何类型的属性中。




原标题:数据注解特性之ConcurrencyCheck特性【Code

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

八爪鱼跨境电商物流:https://www.goluckyvip.com/news/6149.html
印度海运货物舱单和转运有新规,3月1日生效!:https://www.goluckyvip.com/news/615.html
TikTok英国小店降低申请门槛,跨境卖家如何快速入局TikTok?:https://www.goluckyvip.com/news/6150.html
卡车司机大罢工,美西多名工人感染新冠,港口和边境运输严重受阻!:https://www.goluckyvip.com/news/6151.html
外媒:在这项排名上,Shopee再次赶超Tokopedia 和Lazada:https://www.goluckyvip.com/news/6152.html
马士基拟17亿美元收购一家跨境物流公司,亚马逊英国将包裹储物柜数量增加一倍 :https://www.goluckyvip.com/news/6153.html
探讨内地人开设香港账户的可行性 :https://www.kjdsnews.com/a/1836442.html
在古巴做游轮 古巴旅游项目:https://www.vstour.cn/a/363194.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流