Khám phá điểm mới lạ của Fluent API và Entity Framework Core

9:22 09/03/2023

Entity Framework Fluent API là một công nghệ có thể được áp dụng trong ngôn ngữ C# hỗ trợ tạo cơ sở dữ liệu với EF Core Code First. Fluent API tạo nên dựa trên Fluent API design pattern còn được biết đến với tên gọi Fluent Interface mà các kết quả được tạo nên dựa theo một chuỗi phương thức config

Trong Entity Framework Core, lớp  hoạt động như một Fluent API. Bằng cách sử dụng nó, chúng ta có thể định cấu hình nhiều thứ khác nhau, vì nó cung cấp nhiều tùy chọn cấu hình hơn các thuộc tính chú thích dữ liệu. Entity Framework Core Fluent API cấu hình các khía cạnh sau của một mô hình.

Entity Framework Core Fluent API có thể xác định cấu hình các mặt sau của các class mode:

  • Cấu hình model: Định hình các thực thể và thuộc tính của chúng với các chi tiết về dữ liệu bổ sung để loại trừ khỏi các thiết lập mặc định.
  • Cấu hình thực thể: Định hình các qua hệ giữa các model.
  • Cấu hình thuộc tính: Định hình thuộc tính và các ràng buộc.

Bảng các phương thức thông dụng để cấu hình:

Configurations Fluent API Methods Cách sử dụng
Cấu hình mô hình HasDbFunction() Định cấu hình chức năng cơ sở dữ liệu khi nhắm mục tiêu cơ sở dữ liệu quan hệ.
HasDefaultSchema() cấu hình chỉ định lược đồ cơ sở dữ liệu.
HasAnnotation() Thêm hoặc cập nhật các thuộc tính chú thích dữ liệu trên thực thể.
HasSequence() Định cấu hình chuỗi cơ sở dữ liệu khi nhắm mục tiêu cơ sở dữ liệu quan hệ.
Cấu hình thực thể HasAlternateKey() Định cấu hình thuộc tính là Unique
Has Index() Định cấu hình chỉ mục của các thuộc tính được chỉ định.
HasKey() Định cấu hình thuộc tính hoặc danh sách thuộc tính làm Khóa chính.
HasMany() Định cấu hình phần nhiều của mối quan hệ, trong đó một thực thể chứa thuộc tính tập hợp tham chiếu thuộc loại khác cho mối quan hệ một-nhiều hoặc nhiều-nhiều.
HasOne() Định cấu hình Một phần của mối quan hệ, trong đó một thực thể chứa thuộc tính tham chiếu thuộc loại khác cho mối quan hệ một-một hoặc một-nhiều.
Ignore() Định cấu hình rằng lớp hoặc thuộc tính không được ánh xạ tới một bảng hoặc cột.
OwnsOne() Định cấu hình mối quan hệ trong đó thực thể đích thuộc sở hữu của thực thể này
ToTable() Định cấu hình bảng cơ sở dữ liệu mà thực thể ánh xạ tới.
Cấu hình thuộc tính HasColumnName() Định cấu hình tên cột tương ứng trong cơ sở dữ liệu cho thuộc tính.
HasColumnType() Định cấu hình kiểu dữ liệu của cột tương ứng trong cơ sở dữ liệu cho thuộc tính.
HasDefaultValue() Định cấu hình giá trị mặc định cho cột .
HasField() Chỉ định trường sao lưu sẽ được sử dụng với một thuộc tính.
HasMaxLength() Định cấu hình độ dài tối đa của dữ liệu có thể được lưu trữ trong một thuộc tính.
IsRequired() Định cấu hình xem giá trị hợp lệ của thuộc tính là bắt buộc hay null là giá trị hợp lệ.
IsRowVersion() Định cấu hình thuộc tính sẽ được sử dụng trong phát hiện đồng thời lạc quan.
IsUnicode() Định cấu hình thuộc tính chuỗi có thể chứa các ký tự unicode hoặc không.

Ví dụ về Fluent Api:

public class SchoolDBContext: DbContext  // Kế thừa lớp DbContext

{

    public DbSet<Student> Students { get; set; }         

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

        //Viết cấu hình Fluent API ở đây

        modelBuilder.Entity<Student>()

                .Property(s => s.StudentId)

                .HasColumnName(“Id”)

                .HasDefaultValue(0)

                .IsRequired();

    }

}

Trong ví dụ trên, phiên bản ModelBuilder Fluent API được sử dụng để định cấu hình một thuộc tính bằng cách gọi nhiều phương thức trong cùng một chuỗi lệnh. Nó cấu hình thuộc  tính của StudentId của lớp Student, nó định cấu hình trên bằng cách sử dụng HasColumnName(), giá trị mặc định bằng cách sử dụng HasDefaultValue() và xác định thuộc tính là not null bằng cách sử dụng IsRequired(). Phương thức trong một câu lệnh thay vì nhiều câu lệnh. Điều này làm tăng khả năng đọc và cũng mất ít thời gian hơn để viết so với nhiều câu lệnh, như minh họa bên dưới:

modelBuilder.Entity<Student>()

        .Property(s => s.StudentId)

        .HasColumnName(“Id”)

        .HasDefaultValue(0)

        .IsRequired();

modelBuilder.Entity<Student>().Property(s => s.StudentId).HasColumnName(“Id”);

modelBuilder.Entity<Student>().Property(s => s.StudentId).HasDefaultValue(0);

modelBuilder.Entity<Student>().Property(s => s.StudentId).IsRequired();

Đây là những thông tin giải mã Fluent API và Entity Framework Core – cách bạn có thể cấu hình mối quan hệ nhiều-nhiều nếu các thực thể tuân theo các quy ước cho các mối quan hệ một-nhiều với thực thể tham gia. Chúc các bạn sinh viên Cao đẳng FPT Mạng cá cược bóng đá sẽ áp dụng thành công công thức code trên nhé!

Bộ môn Ứng dụng phần mềm
Cao đẳng FPT Mạng cá cược bóng đá Hà Nội

Cùng chuyên mục

Đăng Kí học Fpoly 2023

Bình Luận