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

Thuộc tính cột trong Entity Framework

Thuộc tính Column (Column Attribute) có thể được áp dụng cho một hoặc nhiều thuộc tính trong lớp thực thể để định cấu hình tên cột, kiểu dữ liệu và thứ tự tương ứng trong bảng cơ sở dữ liệu.

Thuộc tính Column ghi đè quy ước mặc định. Theo các quy ước mặc định trong EF 6 và EF Core, nó tạo một cột trong bảng db có cùng tên và thứ tự như tên thuộc tính.

Khai báo thuộc tính Column:

[Column(string name, Properties:[Order = int],[TypeName = string])]
  • name: Tên của một cột trong bảng db.
  • Order: Thứ tự của một cột, bắt đầu với chỉ số bằng 0. (Không bắt buộc)
  • TypeName: Kiểu dữ liệu của một cột. (Không bắt buộc)

Ví dụ sau đây thay đổi tên của một cột.

using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
    public int StudentID { get; set; }
     
    [Column("Name")]
    public string StudentName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public byte[] Photo { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
}

Trong ví dụ trên, thuộc tính Column được áp dụng cho một thuộc tính StudentName. Vì vậy, EF sẽ ghi đè các quy ước mặc định và tạo một cột Name thay vì cột StudentName trong bảng Students như dưới đây.

dataannotations column attribute


Kiểu dữ liệu của cột

Sử dụng tham số TypeName trong thuộc tính Column để thay đổi kiểu dữ liệu phù hợp của cột db tương ứng, như được trình bảy ở bên dưới.

using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
    public int StudentID { get; set; }
    
    [Column("Name")]
    public string StudentName { get; set; }
    [Column("DoB", TypeName="DateTime2")]
    public DateTime DateOfBirth { get; set; }
    public byte[] Photo { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
}

Trong ví dụ trên, tham số TypeName = "DateTime2" được áp dụng trên thuộc tính DateOfBirth. Điều này sẽ tạo ra một cột kiểu DateTime2 thay vì DateTime như dưới đây.

dataannotations column attribute


Thứ tự cột

Sử dụng tham số Order bắt đầu từ 0 để thiết lập thứ tự các cột trong cơ sở dữ liệu.

Theo quy ước mặc định, các cột khóa chính sẽ đứng trước và sau đó là các cột còn lại dựa trên thứ tự các thuộc tính tương ứng của chúng trong một lớp thực thể.

Lưu ý: Tham số Order phải được áp dụng trên tất cả các thuộc tính có chỉ số khác nhau, bắt đầu từ số 0.
using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
    [Column(Order = 0)]
    public int StudentID { get; set; }
    
    [Column("Name", Order = 1)]
    public string StudentName { get; set; }
    
    [Column("DoB", Order = 5)]
    public DateTime DateOfBirth { get; set; }
    [Column(Order = 3)]
    public byte[] Photo { get; set; }
    [Column(Order = 2)]
    public decimal Height { get; set; }
    [Column(Order = 4)]
    public float Weight { get; set; }
}

Ví dụ trên sẽ tạo các cột theo thứ tự được chỉ định như dưới đây.

Column Attribute trong Entity Framework