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. 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#.
-
Các bước tạo database bằng EF Core code first:
- Install EF Core DB provider (Microsoft.EntityFrameworkCore.SqlServer)
- Install EF Core tools (Entity Framework Core Tools)
- Create models and DBContext class
- Run command line in package manager console để tạo database từ code c#.
Chi tiết
- Create models and DBContext class.
- 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
4. Sử dụng Data Annotation Attributes để chú thích dữ liệu
- Dùng để set các thuộc tính liên quan đến database như key, column name, table name, length, type… khi tạo database https://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx
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
7. Linq to entities
-
Sử dụng Linq to entities để truy vấn dữ liệu.
-
Sử dụng sql profiler để xem câu query chạy bên dưới khi dùng linq to entities
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()
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)
- Sử dụng interface ILazyLoader (https://docs.microsoft.com/en-us/ef/core/querying/related-data/lazy )
Sử dụng Proxies (package Microsoft.EntityFrameworkCore.Proxies)
- Cài đặt package Microsoft.EntityFrameworkCore.Proxies
- Config add lazy loading
- Sử dụng thuộc tính Virtual cho các thuộc tính dữ liệu có quan hệ.
10. Proxy design pattern (đọc thêm)
https://refactoring.guru/design-patterns/proxy
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.
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:
- https://xuanthulab.net/ado-net-gioi-thieu-ado-net-va-ket-noi-sql-server-voi-sqlconnection.html
- https://docs.microsoft.com/en-us/ef/efcore-and-ef6/
- docs.microsoft.com/en-us/ef/core/what-is-new/roadmap
- https://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx
- https://docs.microsoft.com/en-us/ef/core/querying/related-data/lazy
- https://refactoring.guru/design-patterns/proxy
- https://code-maze.com/entity-framework-core-series/