EF Code-First - Cấu hình các lớp
Cấu hình các lớp trong Entity Framework
Code First xây dựng mô hình khái niệm từ các lớp thực thể của bạn bằng cách sử dụng các quy ước mặc định.
EF 6 Code First tận dụng một mẫu lập trình được gọi là quy ước về cấu hình. Tuy nhiên, bạn có thể ghi đè các quy ước này bằng cách cấu hình các lớp thực thể của bạn để cung cấp cho EF thông tin cần thiết.
Có hai cách để cấu hình các lớp thực thể của bạn:
- Attribute chú thích dữ liệu.
- Fluent API.
Attribute chú thích dữ liệu
Chú thích dữ liệu là một cấu hình dựa trên attribute đơn giản, bạn có thể áp dụng cho các lớp và thuộc tính của nó.
Các attribute này không chỉ dành riêng cho EF mà còn được sử dụng trong ASP.NET Web Form và ASP.NET MVC. Do đó, chúng được đặt trong một namespace riêng biệt là System.ComponentModel.DataAnnotations
.
Ví dụ sau đây minh họa việc sử dụng một số attribute chú thích dữ liệu:
[Table("StudentInfo")]
public class Student
{
public Student() { }
[Key]
public int SID { get; set; }
[Column("Name", TypeName="ntext")]
[MaxLength(20)]
public string StudentName { get; set; }
[NotMapped]
public int? Age { get; set; }
public int StdId { get; set; }
[ForeignKey("StdId")]
public virtual Standard Standard { get; set; }
}
Lưu ý: Attribute chú thích dữ liệu không hỗ trợ tất cả các tùy chọn cấu hình cho Entity Framework. Vì vậy, bạn có thể sử dụng Fluent API, nó cung cấp tất cả các tùy chọn cấu hình cho EF.
Fluent API
Một cách khác để định cấu hình các lớp là bằng cách sử dụng Entity Framework Fluent API. Fluent API dựa trên mẫu thiết kế Fluent API (hay còn gọi là giao diện thông thạo) trong đó kết quả được tạo thành từ một chuỗi phương thức.
Cấu hình Fluent API có thể được áp dụng khi EF xây dựng mô hình từ các lớp thực thể của bạn. Bạn có thể thêm các cấu hình Fluent API bằng cách ghi đè phương thức OnModelCreating
của lớp DbContext
trong Entity Framework 6.x, như được trình bày bên dưới:
public class SchoolDBContext: DbContext
{
public SchoolDBContext(): base("SchoolDBConnectionString")
{
}
public DbSet<Student> Students { get; set; }
public DbSet<Standard> Standards { get; set; }
public DbSet<StudentAddress> StudentAddress { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Configure domain classes using modelBuilder here..
}
}
Bạn có thể sử dụng tham số modelBuilder
, một đối tượng của lớp DbModelBuilder
để cấu hình các lớp thực thể của bạn. DbModelBuilder
được gọi là Fluent API vì bạn có thể gọi các phương thức khác nhau trong một chuỗi phương thức.