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