EF Code-First - Fluent API

Fluent API là gì?

Entity Framework Fluent API được sử dụng để cấu hình các lớp thực thể để ghi đè các quy ước mặc định của Entity Framework. 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.

Trong Entity Framework 6, lớp DbModelBuilder hoạt động như một Fluent API, chúng ta có thể sử dụng nó để thực hiện các cấu hình nhiều thứ khác nhau. Nó cung cấp nhiều tùy chọn cấu hình hơn các attribute chú thích dữ liệu.

Để viết các cấu hình Fluent API, chúng ta cần ghi đè phương thức OnModelCreating() của lớp DbContext trong một lớp Context tùy chỉnh, như được trình bày bên dưới.

public class SchoolContext: DbContext 
{
    public DbSet<Student> Students { get; set; }
        
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Write Fluent API configurations here

    }
}

Bạn có thể sử dụng các attribute chú thích dữ liệu và Fluent API cùng một lúc. Entity Framework ưu tiên Fluent API hơn các attribute chú thích dữ liệu.

Các phương thức quan trọng của Fluent API

Fluent API cấu hình các khía cạnh sau của một mô hình trong Entity Framework 6:

  1. Cấu hình toàn mô hình: Cấu hình lược đồ mặc định, các thực thể được loại trừ trong ánh xạ, v.v.
  2. Cấu hình thực thể: Cấu hình thực thể cho ánh xạ bảng và mối quan hệ, ví dụ: khóa chính, index, tên bảng, các mối quan hệ như: một-một, một-nhiều, nhiều-nhiều, v.v.
  3. Cấu hình thuộc tính: Cấu hình thuộc tính để ánh xạ cột, ví dụ: tên cột, NotNull, nullable, khóa ngoại, kiểu dữ liệu, cột concurrency, v.v.

Bảng sau liệt kê các phương thức quan trọng của Fluent API:

Phương thức Mô tả
Cấu hình toàn mô hình
HasDefaultSchema Chỉ định lược đồ cơ sở dữ liệu mặc định.
ComplexType Cấu hình lớp là kiểu phức tạp.
Cấu hình thực thể
HasIndex Cấu hình thuộc tính Index cho kiểu thực thể.
HasKey Cấu hình thuộc tính khóa chính cho kiểu thực thể.
HasMany Cấu hình mối quan hệ một-nhiều hoặc nhiều-nhiều.
HasOptional Cấu hình một mối quan hệ tùy chọn sẽ tạo khóa ngoại không thể hủy trong cơ sở dữ liệu.
HasRequired Cấu hình mối quan hệ bắt buộc sẽ tạo cột khóa ngoại không thể rỗng trong cơ sở dữ liệu.
Ignore Cấu hình lớp hoặc thuộc tính không được ánh xạ vào bảng hoặc cột trong cơ sở dữ liệu.
Map Cho phép cấu hình nâng cao liên quan đến cách thực thể được ánh xạ tới lược đồ cơ sở dữ liệu.
MapToStoredProcedures Cấu hình kiểu thực thể để sử dụng các stored procedure INSERT, UPDATE và DELETE.
ToTable Cấu hình tên bảng cho thực thể.
Cấu hình thuộc tính
HasColumnAnnotation Đặt một chú thích trong mô hình cho cột cơ sở dữ liệu được sử dụng để lưu trữ thuộc tính.
IsRequired Cấu hình thuộc tính bắt buộc nhập dữ liệu khi gọi phương thức SaveChanges.
IsConcurrencyToken Cấu hình thuộc tính được sử dụng làm mã thông báo Concurrency.
IsOptional Cấu hình thuộc tính là tùy chọn sẽ tạo một cột nullable trong cơ sở dữ liệu.
HasParameterName Cấu hình tên của tham số được sử dụng trong stored procedure cho thuộc tính.
HasDatabaseGeneratedOption Cấu hình cách tạo giá trị cho cột tương ứng trong cơ sở dữ liệu, ví dụ tính toán, danh tính hoặc không có.
HasColumnOrder Cấu hình thứ tự của cột trong cơ sở dữ liệu được sử dụng để lưu trữ thuộc tính.
HasColumnType Cấu hình kiểu dữ liệu của cột tương ứng của một thuộc tính trong cơ sở dữ liệu.
HasColumnName Cấu hình tên cột tương ứng của một thuộc tính trong cơ sở dữ liệu.
IsConcurrencyToken Cấu hình thuộc tính được sử dụng làm mã thông báo Concurrency.