+6

[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ữ liệu đó.

image.png

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

public class AdoNetCSharp
    {
        public void Run()
        {
            var connectionString = "Server=127.0.0.1; Initial Catalog=ADONETEXAMPLE; User ID=testado; Password=testado.net; Application Name=Test ADP.NET";
            using (var connection = new SqlConnection(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=LONGNGUYENDH\SQLEXPRESS;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


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.