[Phần 2] Tổng quan về Entity framework core

Tiếp nối phần 1: https://viblo.asia/p/phan-1-tong-quan-ve-entity-framework-core-4dbZNQNaKYM 1. Nhắc lại kiến thức phần 1 Entity Framework Core là một Object Relational Mapping (ORM) framework giúp dễ dàng truy xuất và lưu trữ dữ liệu trong database thông qua việc ánh xạ database thành các objects tương ứng trong code. Các hướng tiếp cận trong EntityFramework Core: 2.

Tiếp nối phần 1: https://viblo.asia/p/phan-1-tong-quan-ve-entity-framework-core-4dbZNQNaKYM

1. Nhắc lại kiến thức phần 1

  • Entity Framework Core là một Object Relational Mapping (ORM) framework giúp dễ dàng truy xuất và lưu trữ dữ liệu trong database thông qua việc ánh xạ database thành các objects tương ứng trong code.

image.png

  • Các hướng tiếp cận trong EntityFramework Core:
    image.png

2. Sử dụng EF Core theo hướng Code First

  • Code first là cách tiếp cận dựa vào việc tạo các đối tượng (domain classes) bằng code C# trước. Sau đó Entity Framework sẽ tạo cơ sở dữ liệu từ code c#.
    image.png

  • Các bước tạo database bằng EF Core code first:

  1. Install EF Core DB provider (Microsoft.EntityFrameworkCore.SqlServer)
  2. Install EF Core tools (Entity Framework Core Tools)
  3. Create models and DBContext class
  4. Run command line in package manager console để tạo database từ code c#.

Chi tiết

  • Create models and DBContext class.
    image.png

image.png

image.png

  • Run command line in package manager console để generate database.
    Trong Visual Studio, chọn menu Tools -> NuGet Package Manger -> Package Manger Console. Chạy lệnh bên dưới:
  • Tạo script: add-migration migrationScriptName
  • Chạy script để update vào database: update-database –verbose
  • Ví dụ:
    • add-migration EFCoreCodeFirstDB
    • update-database –verbose

3. Ánh xạ kiểu dữ liệu từ c# sang Sql server

image.png

4. Sử dụng Data Annotation Attributes để chú thích dữ liệu

image.png

5. Update database

  • Sau khi chỉnh sửa model hoặc dbcontext để update database ta chạy lệnh dưới:
  • Tạo script: add-migration migrationScriptName
  • Chạy script để update vào database: update-database –verbose
  • Ví dụ:
    • add-migration editLengthOfColumn
    • update-database –verbose

6. Tạo các table có mối quan hệ

  • Mối quan hệ một – một
  • Mối quan hệ nhiều – nhiều (tạo table trung gian)
  • Mối quan hệ một – nhiều

Ví dụ mối quan hệ một – nhiều giữa 2 table

image.png

image.png

image.png

7. Linq to entities

  • Sử dụng Linq to entities để truy vấn dữ liệu.
    image.png

  • Sử dụng sql profiler để xem câu query chạy bên dưới khi dùng linq to entities
    image.png

8. Eager loading trong EF core

  • Eager loading cho phép khi query dữ liệu từ một Entity và ta có thể tải các entity liên quan như một phần của câu query, mà không phải thực hiện một câu query riêng.
  • EF Core cung cấp phương thức InClude()
    image.png

9. Lazy loading trong EF core

  • Lazy loading cho phép trì hoãn việc tải các dữ liệu liên quan, cho đến khi bạn yêu cầu.

  • Lazy loading đối lập hoàn toàn với Eager loading (tải toàn bộ).

  • Có 2 cách sử dụng lazy loading:

Sử dụng Proxies (package Microsoft.EntityFrameworkCore.Proxies)

  1. Cài đặt package Microsoft.EntityFrameworkCore.Proxies
  2. Config add lazy loading
  3. Sử dụng thuộc tính Virtual cho các thuộc tính dữ liệu có quan hệ.

image.png

image.png

10. Proxy design pattern (đọc thêm)

image.png

https://refactoring.guru/design-patterns/proxy

image.png

11. Explicit loading EF Core

  • Explicit loading là cơ chế tải dữ liệu liên quan trong EF core. Hoạt động giống lazy loading, dữ liệu liên quan được tải riêng biệt sau khi tải dữ liệu chính. Tuy nhiên quá trình này không diễn ra tự động mà phải gọi phương thức tải dữ liệu.
  • Sử dụng phương thức Load() để tải các entity liên quan.
  • Sử dụng phương thức Query() để viết linq to entities lọc các đối tượng liên quan.

image.png

image.png

12. Câu hỏi

  • Entity framework core là gì? Phiên bản hiện tại mới nhất là bao nhiêu?
  • Ưu điểm của entity framework core là gì?
  • So sánh entity framework core với entity framework?
  • Phân biệt code first và database first trong EF core?
  • Phân biệt eager loading, lazy loading và explicit loading?

12. Bài tập về nhà

  • Tạo database Blog gồm 2 table Post và Category có quan hệ 1-n.
  • Cấu hình Lazy Loading sử dụng Proxy package.
  • Xem lại và thực hành truy vấn dữ liệu bằng linq và các thao tác chỉnh sửa dữ liệu vào db (add, update, delete)

Tham khảo:

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ