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.
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