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:
- Quản lý kết nối cơ sở dữ liệu.
- Cấu hình mô hình và mối quan hệ.
- Truy vấn cơ sở dữ liệu.
- Lưu dữ liệu vào cơ sở dữ liệu.
- Cấu hình theo dõi thay đổi.
- Bộ nhớ đệm.
- 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ể Student
và Course
. Nó cũng ghi đè hai phương thức OnConfiguring
và OnModelCreating
.
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. |