Ứng dụng Entity Framework Core đầu tiên

Ở hướng dẫn này, bạn sẽ tìm hiểu từng bước cách sử dụng Entity Framework Core theo cách tiếp cận Code First. Để minh họa, chúng tôi sẽ tạo một ứng dụng .NET Core Console bằng Visual Studio 2017 (hoặc mới hơn).

Ứng dụng .NET Core Console có thể được tạo bằng Visual Studio 2017 hoặc Giao diện dòng lệnh (CLI) cho .NET Core. Ở đây chúng tôi sẽ sử dụng Visual Studio 2017.

Để tạo ứng dụng .NET Core Console, hãy mở Visual Studio 2017 và chọn trên menu: File -> New -> Project.. Điều này sẽ mở cửa sổ bật lên New Project như hình ảnh bên dưới.

Ứng dụng Entity Framework Core đầu tiên

Trong cửa sổ New Project, mở rộng Installed -> Visual C# ở khung bên trái và chọn mẫu Console App (.NET Core) trong ngăn giữa.

Nhập tên dự án, vị trí đặt dự án và nhấp vào nút OK để tạo ứng dụng bảng điều khiển, như hình ảnh bên dưới.

Ứng dụng Entity Framework Core đầu tiên

Bây giờ, chúng ta cần cài đặt EF Core trong ứng dụng của mình bằng Package Manager Console. Chọn trên menu: Tools -> NuGet Package Manager -> Package Manager Console và thực hiện lệnh sau để cài đặt gói nhà cung cấp SQL Server:

PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer

Tìm hiểu thêm về cài đặt EF Core trong phần "Cài đặt Entity Framework Core" của bài viết Entity Framework Core toàn tập tại đây:

Entity Framework Core toàn tập | Comdy
Entity Framework Core toàn tập sẽ hướng dẫn bạn tất cả mọi thứ về Entity Framework Core.

Tạo mô hình dữ liệu thực thể trong EF Core

Entity Framework cần có một mô hình dữ liệu thực thể để giao tiếp với cơ sở dữ liệu. Nó xây dựng một mô hình dựa trên các lớp thực thể của bạn bằng cách sử dụng cấu hình chú thích dữ liệu và Fluent API.

Mô hình EF bao gồm ba phần: mô hình khái niệm, mô hình lưu trữ và ánh xạ giữa mô hình khái niệm và mô hình lưu trữ.

Theo cách tiếp cận Code First, EF xây dựng mô hình khái niệm dựa trên các lớp thực thể của bạn, lớp Context và các cấu hình.

EF Core xây dựng mô hình lưu trữ và ánh xạ dựa trên trình cung cấp cơ sở dữ liệu bạn sử dụng. Ví dụ, mô hình lưu trữ của SQL Server sẽ khác với DB2.

EF sử dụng mô hình này cho các hoạt động CRUD (Create, Read, Update, Delete) cho cơ sở dữ liệu.

Vì vậy, chúng ta cần tạo các lớp thực thể và lớp Context trước. Dưới đây là các lớp thực thể đơn giản cho Student và Course:


public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
}

Bây giờ, chúng ta cần tạo một lớp Context bằng cách kế thừa từ lớp DbContext. Lớp SchoolContext sau còn được gọi là lớp Context .


namespace EFCoreTutorials
{
    public class SchoolContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        { 
            optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;");
        }
    }
}

Lớp Context ở trên bao gồm hai thuộc tính DbSet<TEntity> cho StudentCourse sẽ được ánh xạ tới các bảng StudentsCourses trong cơ sở dữ liệu.

Trong phương thức OnConfiguring(), một thể hiện của DbContextOptionsBuilder được sử dụng để chỉ định cơ sở dữ liệu nào sẽ sử dụng.

Chúng tôi sẽ sử dụng MS SQL Server, nó được thêm bằng cách sử dụng phương thức mở rộng UseSqlServer trên DbContextOptionsBuilder.

Chuỗi kết nối "Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;" trong phương thức UseSqlServer cung cấp thông tin cơ sở dữ liệu: Server= chỉ định máy chủ DB sẽ sử dụng, Database= chỉ định tên của cơ sở dữ liệu và Trusted_Connection=True chỉ định chế độ xác thực Windows.

EF Core sẽ sử dụng chuỗi kết nối này để tạo cơ sở dữ liệu khi chúng ta chạy Migration.

Sau khi tạo lớp Context và các lớp thực thể, đã đến lúc thêm Migration để tạo cơ sở dữ liệu.

Tạo Migration trong EF Core

EF Core có các lệnh Migration khác nhau để tạo hoặc cập nhật cơ sở dữ liệu dựa trên mô hình.

Tại thời điểm này chưa có cơ sở dữ liệu SchoolDB. Vì vậy, chúng ta cần tạo cơ sở dữ liệu từ mô hình (thực thể và Context) bằng cách thêm Migration.

Chúng ta có thể thực thi lệnh Migration bằng cách sử dụng Package Manger Console hoặc dotnet CLI (giao diện dòng lệnh).

Trong Visual Studio, mở NuGet Package Manager Console từ Tools -> NuGet Package Manager -> Package Manager Console và nhập lệnh sau:

PM> add-migration CreateSchoolDB

Nếu bạn sử dụng dotnet CLI, hãy nhập lệnh sau.

> dotnet ef migrations add CreateSchoolDB

Điều này sẽ tạo một thư mục mới có tên Migrations trong dự án và tạo các file ModelSnapshot, như hình ảnh bên dưới.

Ứng dụng Entity Framework Core đầu tiên

Sau khi tạo Migration, chúng ta vẫn cần tạo cơ sở dữ liệu bằng lệnh update-database trong Package Manager Console, như bên dưới.

PM> update-database –verbose

Nếu bạn sử dụng dotnet CLI, hãy nhập lệnh sau.

> dotnet ef database update

Điều này sẽ tạo cơ sở dữ liệu với tên và máy chủ được chỉ định trong chuỗi kết nối trong phương thức UseSqlServer(). Nó tạo một bảng cho mỗi thuộc tính DbSet (bảng StudentsCourses) như hình ảnh bên dưới.

Ứng dụng Entity Framework Core đầu tiên

Đây là lần Migration đầu tiên để tạo cơ sở dữ liệu. Bây giờ, bất cứ khi nào chúng ta thêm hoặc cập nhật các lớp thực thể hoặc cấu hình, chúng ta cần đồng bộ hóa cơ sở dữ liệu với mô hình bằng cách sử dụng các lệnh add-migrationupdate-database.

Đọc hoặc ghi dữ liệu

Bây giờ, chúng ta có thể sử dụng lớp Context để lưu và truy xuất dữ liệu, như ví dụ bên dưới.


namespace EFCoreTutorials
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new SchoolContext()) 
            {
                var std = new Student()
                {
                     Name = "Bill"
                };

                context.Students.Add(std);
                context.SaveChanges();
            }
        }
    }
}

Vì vậy, bạn cần thực hiện các bước này để sử dụng Entity Framework Core trong ứng dụng của mình. Để biết thêm về các truy vấn trong Entity Framework Core bạn có thể xem thêm bài viết sau.

Truy vấn trong Entity Framework Core | Comdy
Truy vấn trong Entity Framework Core có gì mới? Truy vấn trong EF Core khác EF ở những điểm nào.
Entity Framework
Bài Viết Liên Quan:
2 kịch bản lưu dữ liệu trong Entity Framework Core
Trung Nguyen 30/04/2020
2 kịch bản lưu dữ liệu trong Entity Framework Core

2 kịch bản lưu dữ liệu trong Entity Framework Core là kịch bản được kết nối và kịch bản ngắt kết nối.

Truy vấn trong Entity Framework Core
Trung Nguyen 29/04/2020
Truy vấn trong Entity Framework Core

Truy vấn trong Entity Framework Core có gì mới? Truy vấn trong EF Core khác EF ở những điểm nào.

Entity Framework Core toàn tập
Trung Nguyen 29/04/2020
Entity Framework Core toàn tập

Entity Framework Core toàn tập sẽ hướng dẫn bạn tất cả mọi thứ về Entity Framework Core.

Entity Framework Code First toàn tập
Trung Nguyen 28/04/2020
Entity Framework Code First toàn tập

Entity Framework Code First toàn tập sẽ hướng dẫn bạn mọi thứ về Entity Framework Code First.