[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

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,