EF Core - DbContext trong Entity Framework Core

DbContext trong Entity Framework Core

Lớp DbContext là một phần không thể thiếu của Entity Framework. Một thể hiện của DbContext đại diện cho một phiên làm việc với cơ sở dữ liệu có thể được sử dụng để truy vấn và lưu các thể hiện của các thực thể của bạn vào cơ sở dữ liệu.

DbContext là sự kết hợp của các mẫu Unit Of Work và Repository. DbContext trong EF Core cho phép chúng ta thực hiện các tác vụ sau:

  1. Quản lý kết nối cơ sở dữ liệu.
  2. Cấu hình mô hình và mối quan hệ.
  3. Truy vấn cơ sở dữ liệu.
  4. Lưu dữ liệu vào cơ sở dữ liệu.
  5. Cấu hình theo dõi thay đổi.
  6. Bộ nhớ đệm.
  7. Quản lý giao dịch.

Để sử dụng DbContext trong ứng dụng, chúng ta cần tạo lớp kế thừa từ lớp DbContext, còn được gọi là lớp Context.

Lớp Context này thường bao gồm các thuộc tính Dbset <TEntity> cho mỗi thực thể trong mô hình. Hãy xem ví dụ sau mình họa về lớp Context trong EF Core.


public class SchoolContext : DbContext
{
    public SchoolContext()
    {
  
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    }
    //entities
    public DbSet<Student> Students { get; set; }
    public DbSet<Course> Courses { get; set; }
} 

Trong ví dụ trên, lớp SchoolContext có nguồn gốc từ lớp DbContext và chứa các thuộc tính DbSet<TEntity> của các lớp thực thể StudentCourse. Nó cũng ghi đè hai phương thức OnConfiguringOnModelCreating.

Chúng ta phải tạo một thể hiện của SchoolContext để kết nối với cơ sở dữ liệu và lưu hoặc truy xuất dữ liệu Student hoặc Course.

Phương thức OnConfiguring() cho phép chúng ta lựa chọn và cấu hình nguồn dữ liệu được sử dụng với một Context sử dụng DbContextOptionsBuilder. Tìm hiểu cách cấu hình một lớp DbContext tại đây .

Phương thức OnModelCreating() cho phép chúng ta cấu hình mô hình sử dụng ModelBuilder Fluent API.

Các phương thức của DbContext

Phương thức Mô tả
Add Thêm một thực thể mới vào DbContext với trạng thái Added và bắt đầu theo dõi nó. Dữ liệu thực thể mới này sẽ được chèn vào cơ sở dữ liệu khi gọi SaveChanges().
AddAsync Phương thức không đồng bộ để thêm một thực thể mới vào DbContext với trạng thái Added và bắt đầu theo dõi nó. Dữ liệu thực thể mới này sẽ được chèn vào cơ sở dữ liệu khi gọi SaveChangesAsync().
AddRange Thêm một tập các thực thể mới vào DbContext với trạng thái Added và bắt đầu theo dõi nó. Dữ liệu các thực thể mới này sẽ được chèn vào cơ sở dữ liệu khi gọi SaveChanges().
AddRangeAsync Phương thức không đồng bộ để thêm tập các thực thể mới vào DbContext với trạng thái Added và bắt đầu theo dõi nó. Dữ liệu thực thể mới này sẽ được chèn vào cơ sở dữ liệu khi gọi SaveChangesAsync().
Attach Đính kèm một thực thể mới hoặc đã tồn tại vào DbContext với trạng thái Unchanged và bắt đầu theo dõi nó.
AttachRange Đính kèm một tập các thực thể mới hoặc đã tồn tại vào DbContext với trạng thái Unchanged và bắt đầu theo dõi nó.
Entry Trả về một EntityEntry cho thực thể. Entry cung cấp quyền truy cập để thay đổi thông tin theo dõi và hoạt động cho thực thể.
Find Tìm một thực thể với các giá trị khóa chính đã cho.
FindAsync Phương thức không đồng bộ để tìm một thực thể với các giá trị khóa chính đã cho.
Remove Thiết lập trạng thái Deleted cho thực thể được chỉ định sẽ xóa dữ liệu khi gọi SaveChanges().
RemoveRange Thiết lập trạng thái Deleted cho một tập các thực thể sẽ xóa dữ liệu trong một lần gọi DB duy nhất khi gọi SaveChanges().
SaveChanges Thực thi lệnh INSERT, UPDATE hoặc DELETE vào cơ sở dữ liệu cho các thực thể với trạng thái Added, Modified hoặc Deleted.
SaveChangesAsync Phương thức SaveChanges() không đồng bộ
Set Tạo một DbSet<TEntity> được sử dụng để truy vấn và lưu các thể hiện của TEntity.
Update Đính kèm thực thể bị ngắt kết nối với trạng thái Modified và bắt đầu theo dõi nó. Dữ liệu sẽ được lưu khi gọi SaveChagnes().
UpdateRange Đính kèm một tập các thực thể bị ngắt kết nối với trạng thái Modified và bắt đầu theo dõi nó. Dữ liệu sẽ được lưu khi gọi SaveChagnes().
OnConfiguring Ghi đè phương thức này để cấu hình cơ sở dữ liệu (và các tùy chọn khác) sẽ được sử dụng cho Context này. Phương thức này được gọi khi mỗi thể hiện của Context được tạo.
OnModelCreating Ghi đè phương thức này để cấu hình cho các thực thể trong các thuộc tính DbSet<TEntity> của lớp Context.

Các thuộc tính của DbContext

Thuộc tính Mô tả
ChangeTracker Cung cấp truy cập vào thông tin và hoạt động cho các thể hiện của thực thể mà Context này đang theo dõi.
Database Cung cấp truy cập vào thông tin và hoạt động liên quan đến cơ sở dữ liệu cho Context này.
Model Trả về siêu dữ liệu của các thực thể, mối quan hệ giữa chúng và cách chúng ánh xạ tới cơ sở dữ liệu.