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
Lưu ý: Các thuộc tính Timestamp chỉ có thể áp dụng cho duy nhất một thuộc tính kiểu mảng byte, trong khi các thuộc tính ConcurrencyCheck có thể áp dụng cho bất kỳ số lượng các thuộc tính với bất kỳ kiểu dữ liệu nào.