EF Code-First - Thuộc tính ConcurrencyCheck
Thuộc tính ConcurrencyCheck trong Entity Framework
Thuộc tính ConcurrencyCheck (ConcurrencyCheck Attribute) có thể áp dụng cho một hoặc nhiều thuộc tính trong một lớp thực thể trong EF 6.
Khi áp dụng cho một thuộc tính, cột tương ứng trong bảng cơ sở dữ liệu sẽ được sử dụng trong kiểm tra xung đột bằng cách sử dụng mệnh đề where
.
using System.ComponentModel.DataAnnotations;
public class Student
{
public int StudentId { get; set; }
[ConcurrencyCheck]
public string StudentName { get; set; }
}
Trong ví dụ trên, thuộc tính ConcurrencyCheck
áp dụng cho thuộc tính StudentName
của lớp thực thể Student
. Vì vậy, EF sẽ bao gồm cột StudentName
trong câu lệnh UPDATE để kiểm tra sự xung đột. Hãy xem xét ví dụ sau.
using(var context = new SchoolContext())
{
var std = new Student()
{
StudentName = "Bill"
};
context.Students.Add(std);
context.SaveChanges();
std.StudentName = "Steve";
context.SaveChanges();
}
Ví dụ trên sẽ thực thi câu lệnh UPDATE sau khi gọi phương thức SaveChanges()
, trong đó nó có StudentName
trong mệnh đề where
.
exec sp_executesql N'UPDATE [dbo].[Students]
SET [StudentName] = @0
WHERE (([StudentId] = @1) AND ([StudentName] = @2))
',N'@0 nvarchar(max) ,@1 int,@2 nvarchar(max) ',@0=N'Steve',@1=1,@2=N'Bill'
go