EF Code-First - Thuộc tính Timestamp

Thuộc tính Timestamp trong Entity Framework

Thuộc tính Timestamp (Timestamp Attribute) chỉ có thể áp dụng một lần trong một lớp thực thể cho thuộc tính kiểu mảng byte.

Nó tạo một cột với kiểu dữ liệu timestamp trong cơ sở dữ liệu SQL Server. EF API tự động sử dụng cột Timestamp này trong kiểm tra xung đột trên câu lệnh UPDATE trong cơ sở dữ liệu.

using System.ComponentModel.DataAnnotations;

public class Student
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }
        
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

Trong ví dụ trên, thuộc tính Timestamp áp dụng cho thuộc tính RowVersion kiểu byte[] của thực thể Student.

Vì vậy, EF sẽ tạo một cột có tên RowVersion với kiểu dữ liệu timestamp trong bảng Students trong cơ sở dữ liệu SQL Server, như được hiển thị bên dưới.

dataannotations TimeStamp attribute

Cột RowVersion sẽ được thêm trong mệnh đề where bất cứ khi nào bạn cập nhật một thực thể và gọi phương thức SaveChanges.

using(var context = new SchoolContext()) 
{
    var std = new Student()
    {
        StudentName = "Bill"
    };

    context.Students.Add(std);
    context.SaveChanges();

    std.StudentName = "Steve";
    context.SaveChanges();
}

Đoạn mã trên sẽ thực thi câu lệnh UPDATE sau trong cơ sở dữ liệu.

exec sp_executesql N'UPDATE [dbo].[Students]
SET [StudentName] = @0
WHERE (([StudentId] = @1) AND ([RowVersion] = @2))
SELECT [RowVersion]
FROM [dbo].[Students]
WHERE @@ROWCOUNT > 0 AND [StudentId] = @1',N'@0 nvarchar(max) ,@1 int,@2 binary(8)',@0=N'Steve',@1=1,@2=0x00000000000007D1
go