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

1. Giao tiếp C# với database và các nguồn dữ liệu khác. Sử dụng thư viện ADO.NET (ActiveX Data Object) là thư viện được xây dựng sẵn trong .NET cho phép ứng dụng kết nối với các nguồn dữ liệu khác nhau và thực hiện các hành động (Get, Add, Update, Delete) trên nguồn dữ

1. Giao tiếp C# với database và các nguồn dữ liệu khác.

  • Sử dụng thư viện ADO.NET (ActiveX Data Object) là thư viện được xây dựng sẵn trong .NET cho phép ứng dụng kết nối với các nguồn dữ liệu khác nhau và thực hiện các hành động (Get, Add, Update, Delete) trên nguồn dữ liệu đó.

image.png

Ví dụ sử dụng ADO.NET để connect với database và đọc dữ liệu:

publicclassAdoNetCSharp{publicvoidRun(){var connectionString ="Server=127.0.0.1; Initial Catalog=ADONETEXAMPLE; User ID=testado; Password=testado.net; Application Name=Test ADP.NET";using(var connection =newSqlConnection(connectionString)){
                connection.Open();using(var command = connection.CreateCommand()){
                    command.CommandText ="Select * From Users";var reader = command.ExecuteReader();while(reader.Read()){var sUserId = reader["UserId"].ToString();var username = reader["Username"].ToString();var password = reader["Password"].ToString();var fullName = reader["Fullname"]!=null? reader["Fullname"].ToString():string.Empty;var sState = reader["State"].ToString();

                        Console.WriteLine("{0}=={1}=={2}=={3}=={4}", sUserId, username, password, fullName, sState);}}}}}
  • Sử dụng các ORM như Entity Framework Core, Dapper…

2. ORM – Object Relational Mapping

  • ORM (Object Relational Mapping) là một kỹ thuật giúp ánh xạ cơ sở dữ liệu sang các đối tượng trong các ngôn ngữ lập trình: Java, C#, PHP….

Ví dụ:

  • Ánh xạ table Person, các column, kiểu dữ liệu trong database sang Class Person trong C#.
    image.png

  • Một số ORM phổ biến:

    • C#: Entity Framework core, Dapper,…
    • Java: Hibernate
    • PHP: Propel or Doctrine
    • Python: the Django ORM or SQLAlchemy

image.png

3. So sánh ADO.NET và ORM

  • ADO.NET
    • Công nghệ đầu tiên của microsoft ra đời lâu, hiện nay ít project xài.
    • Khó sử dụng và phải có kiến thức về query database để viết query trong code C#.
    • Tốc độ nhanh do thực thi câu query trực tiếp. (Viết query or store procedure ở code C# => Dùng ADO.NET execute query đó, không cần phải qua tầng trung gian)
  • Entity Framework
    • Công nghệ mới, nhiều dự án hiện nay đang sử dụng.
    • Cú pháp dễ sử dụng + anh xạ được các object từ database sang code C# theo OOP nên code clear, đọc dễ hiểu.
    • Tốc độ không nhanh bằng ADO.NET do phải qua các tầng trung gian. (Viết code C# bằng Entity Framework => Tầng trung gian xử lý => Tạo ra câu query => Database thực thi)

Note: Để đo tốc độ ta có thể dùng: BenchMark trong .NET

Link: https://benchmarkdotnet.org/articles/overview.html

4. Entity framework core là gì?

5. Một số đặc điểm của Entity framework core

image.png

6. Entity framework core hỗ trợ các database nào?

  • Entity framework core hỗ trợ cho phép làm việc với nhiều loại database. Để làm việc với từng loại ta phải instal các database provider qua NuGet packages.
    • SQL Server (Microsoft.EntityFrameworkCore.SqlServer)
    • MySQL (MySql.Data.EntityFrameworkCore)
    • PostgreSQL
    • Oracle
    • SQLite (mobile)
    • SQL Server Compact
    • DB2
    • Firebird
    • Jet (Microsoft Access)
    • Azure Cosmos DB
    • In-memory (for testing) (Microsoft.EntityFrameworkCore.InMemory)

7. Install Entity Framework core

Nuget packet

8. Các hướng tiếp cận trong EntityFramework Core

  • Database first vs code first
    image.png

9. Sử dụng EF Core theo hướng Database First

  1. Install EF Core DB provider (Microsoft.EntityFrameworkCore.SqlServer)
  2. Install EF Core tools (https://microsoft.entityframeworkcore.tools/)
  3. Create database
  4. Get connection string
  5. Run command line in package manager console

Install

    1. EF Core DB provider (Microsoft.EntityFrameworkCore.SqlServer)
    1. EF Core tools (Microsoft.EntityFrameworkCore.Tools)
      image.png
    1. Create database
      image.png
    1. Get connection string
      image.png

image.png

    1. Run command line in package manager console

Trong Visual Studio, chọn menu Tools -> NuGet Package Manger -> Package Manger Console. Chạy lệnh bên dưới:

  • Scaffold-DbContext [-Connection] [-Provider] [-OutputDir]

Ví dụ: Scaffold-DbContext “Data Source=LONGNGUYENDHSQLEXPRESS;Initial Catalog=EFCore;User ID=sa;Password=123;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

  • Kết quả:

image.png

image.png

10. Ánh xạ kiểu dữ liệu từ c# sang Sql server và ngược lại

image.png

11. DBContext class là gì?

  • Là một class của EntityFrameworkCore giúp query và quản lý các model (Entity) được ánh xạ từ DB.

    • Quản lý các connection tới Database
    • Quản lý model (entity) và mối quan hệ giữa chúng.
    • Query lấy dữ liệu từ database
    • Save dữ liệu xuống database
    • …..

image.png

Đọc thêm về class DBContext:https://docs.microsoft.com/en-us/ef/core/dbcontext-configuration/

12. DBSET là gì?

  • DBSet là một class đại diện cho một entity(model) trong database.
  • Ta có thể thực hiện các thao tác với DataSet:
    • Query dữ liệu
    • Thêm, xóa, sửa dữ liệu
      image.png

13. Get dữ liệu (Sử dụng Linq to entities)

image.png

14. Bài tập về nhà:

  1. Thiết kế database cho trang Blog (Gợi ý gồm các table: Post, Category, User…)
  2. Thực hành sử dụng Entity Framework Core theo hướng Database First để tạo ra code C#.
  3. Viết function lấy danh sách toàn bộ bài viết. Bên ngoài gọi function và sử dụng foreach để in Name của bài post ra màn hình.
  4. Viết function lấy bài viết theo Id. Bên ngoài gọi function này và in Name + description ra màn hình.
  5. Viết function lấy danh sách toàn bộ bài viết bằng ADO.NET. Sử dụng tool BenchMark để so sánh tốc độ khi sử dụng Entity Framework Core và ADO.NET.
    (https://benchmarkdotnet.org/articles/overview.html)

15. 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 đầ