Cách tiếp cận trong Entity Framework

Entity Framework cung cấp ba cách tiếp cận để tạo ra một mô hình thực thể và mỗi phương pháp đều có ưu và nhược điểm riêng.

  • Code First
  • Database First
  • Model First

Nếu bạn chưa tìm hiểu về mô hình dữ liệu thực thể trong Entity Framework thì có thể xem tại đây:

Mô hình dữ liệu trong Entity Framework | Comdy
Mô hình dữ liệu trong Entity Framework là gì? Các thành phần cốt lõi của mô hình dữ liệu trong Entity Framework là gì?

Code First trong Entity Framework

Trong phần này chúng ta sẽ tìm hiểu về cách sử dụng Code First để tạo mô hình dữ liệu thực thể trong Entity Framework.

Một số nhà phát triển thích làm việc với Designer trong khi những người khác chỉ muốn làm việc với code của họ. Đối với những nhà phát triển này, Entity Framework có một quy trình mô hình hóa được gọi là Code First dành cho họ.

  • Code First nhắm vào trường hợp chưa có cơ sở dữ liệu và Code First sẽ tạo ra nó.
  • Nó cũng có thể được sử dụng nếu bạn có một cơ sở dữ liệu trống và Code First sẽ thêm các bảng mới.
  • Code First cho phép bạn định nghĩa mô hình của mình bằng các lớp C# hoặc VB.Net.
  • Cấu hình bổ sung có thể được thực hiện bằng cách sử dụng các thuộc tính trên các lớp và thuộc tính của bạn hoặc bằng cách sử dụng Fluent API.
Code First trong Entity Framework

Khi nào nên sử dụng Code First?

  • Code First được tạo thành từ một tập hợp các mảnh ghép. Đầu tiên là các lớp của bạn.
  • Các lớp này không phải là một thành phần của Entity Framework. Chúng chỉ là các phần tử trong lĩnh vực kinh doanh của bạn.
  • Entity Framework có một Context quản lý sự tương tác giữa các lớp này và cơ sở dữ liệu của bạn.
  • Context không phải chỉ dành riêng cho Code First. Đây là một tính năng của Entity Framework.
  • Code First bổ sung một trình xây dựng mô hình để kiểm tra các lớp của bạn mà Context đang quản lý. Mô hình sử dụng một bộ quy tắc để xác định cách các lớp và các mối quan hệ này được ánh xạ vào cơ sở dữ liệu của bạn.
  • Tất cả điều này xảy ra trong lúc thực thi. Bạn sẽ không bao giờ thấy mô hình này, nó chỉ tồn tại trong bộ nhớ.
  • Code First có khả năng sử dụng mô hình đó để tạo cơ sở dữ liệu nếu được yêu cầu.
  • Nó cũng có thể cập nhật cơ sở dữ liệu nếu mô hình thay đổi, sử dụng một tính năng gọi là Code First Migrations.

Model First trong Entity Framework

Trong phần này, chúng ta hãy tìm hiểu cách tạo mô hình dữ liệu thực thể trong trình thiết kế bằng cách sử dụng Model First.

  • Model First rất phù hợp khi bạn bắt đầu một dự án mới, khi chưa có cơ sở dữ liệu.
  • Mô hình được lưu trữ trong file EDMX và có thể được xem và chỉnh sửa trong trình thiết kế Entity Framework.
  • Trong Model First, bạn định nghĩa mô hình của mình trong trình thiết kế Entity Framework sau đó tạo tập lệnh SQL, nó sẽ tạo lược đồ cơ sở dữ liệu để khớp với mô hình của bạn và sau đó bạn thực thi tập lệnh SQL để tạo lược đồ trong cơ sở dữ liệu của bạn.
  • Các lớp mà bạn tương tác trong ứng dụng của bạn được tạo tự động từ file EDMX.

Sau đây là một ví dụ đơn giản về việc tạo một dự án Console mới bằng cách sử dụng phương pháp Model First.

Bước 1 - Mở Visual Studio và chọn File → New → Project

Tạo project console trong visual studio

Bước 2 - Chọn Installed → Templates → Visual C# → Windows từ khung bên trái và sau đó ở ngăn giữa, chọn Console Application.

Bước 3 - Đặt tên dự án là EFModelFirstDemo.

Bước 4 - Để tạo mô hình, trước tiên bạn nhấp chuột phải vào dự án và chọn Add → New Items…

Tạo model trong Model First

Hộp thoại Add New Item sẽ mở ra như dưới đây.

Tạo model trong Model First

Bước 5 - Chọn ADO.NET Entity Data Model từ ngăn giữa và đặt tên ModelFirstDemoDB.

Bước 6 - Nhấp vào nút Add sẽ khởi chạy hộp thoại Entity Data Model Wizard.

Tạo model trong Model First

Bước 7 - Chọn mô hình Empty EF Designer và nhấp vào nút Next. Entity Framework Designer mở ra với một mô hình trống. Bây giờ chúng ta có thể bắt đầu thêm các thực thể, thuộc tính và liên kết vào mô hình.

Bước 8 - Nhấp chuột phải vào giao diện thiết kế và chọn Properties. Trong cửa sổ Properties, thay đổi Entity Container Name thành ModelFirstDemoDBContext.

Tạo model trong Model First

Bước 9 - Nhấp chuột phải vào giao diện thiết kế và chọn Add New → Entity…

Tạo model trong Model First

Hộp thoại Add Entity sẽ mở như trong hình sau.

Tạo model trong Model First

Bước 10 - Nhập Student dưới dạng tên thực thể và StudentId làm tên thuộc tính và nhấn Ok.

Tạo model trong Model First

Bước 11 - Nhấp chuột phải vào thực thể mới trên giao diện thiết kế và chọn Add New → Scalar Property, nhập Name làm tên của thuộc tính.

Tạo model trong Model First

Bước 12 - Nhập FirstName và sau đó thêm hai thuộc tính vô hướng khác như LastName và EnrollmentDate.

Tạo model trong Model First

Bước 13 - Thêm hai thực thể Course và Enrollment bằng cách làm theo tất cả các bước được đề cập ở trên và cũng thêm một số thuộc tính vô hướng như được hiển thị trong các bước sau.

Tạo model trong Model First

Bước 14 - Chúng tôi có ba thực thể trong Visual Designer, hãy thêm một số liên kết hoặc mối quan hệ giữa chúng.

Bước 15 - Nhấp chuột phải vào giao diện thiết kế và chọn Add New → Association…

Tạo model trong Model First

Bước 16 - Tạo mối quan hệ giữa Student và Enrollment.

Tạo model trong Model First

Bước 17 - Điều này có nghĩa là một Student có nhiều Enrollment và một Enrollment thuộc về một Student.

Bước 18 - Đừng quên đánh dấu vào ô Add foreign key properties to 'Enrollment' Entity và bấm OK.

Bước 19 - Tương tự, thêm một liên kết giữa Course và Enrollment.

Tạo model trong Model First

Bước 20 - Mô hình dữ liệu của bạn sẽ trông giống như hình dưới đây sau khi thêm liên kết giữa các thực thể.

Tạo model trong Model First

Bây giờ chúng ta có một mô hình đơn giản mà chúng ta có thể tạo cơ sở dữ liệu từ và sử dụng để đọc và ghi dữ liệu. Bây giờ chúng ta sẽ tiếp tục tạo cơ sở dữ liệu.

Bước 1 - Nhấp chuột phải vào giao diện thiết kế và chọn Generate Database from Model…

Tạo cơ sở dữ liệu từ model

Bước 2 - Bạn có thể chọn cơ sở dữ liệu có sẵn hoặc tạo kết nối mới bằng cách nhấp vào New Connection…

Tạo cơ sở dữ liệu từ model

Bước 3 - Để tạo Cơ sở dữ liệu mới, nhấp vào New Connection…

Tạo cơ sở dữ liệu từ model

Bước 4 - Nhập tên máy chủ và tên cơ sở dữ liệu.

Tạo cơ sở dữ liệu từ model

Bước 5 - Nhấn Next.

Tạo cơ sở dữ liệu từ model

Bước 6 - Nhấp vào Finish. Việc này sẽ thêm file *.edmx.sql trong dự án. Bạn có thể thực thi các tập lệnh DDL trong Visual Studio bằng cách mở tệp .sql, sau đó nhấp chuột phải và chọn Execute.

Tạo cơ sở dữ liệu từ model

Bước 7 - Hộp thoại sau sẽ được hiển thị để kết nối với cơ sở dữ liệu.

Tạo cơ sở dữ liệu từ model

Bước 8 - Khi thực hiện thành công, bạn sẽ thấy thông báo sau.

Tạo cơ sở dữ liệu từ model

Bước 9 - Chuyển đến Server Explorer, bạn sẽ thấy cơ sở dữ liệu được tạo với ba bảng được chỉ định.

Tạo cơ sở dữ liệu từ model

Tiếp theo, chúng ta cần tạo mã model sử dụng DbContext API.

Bước 1 - Nhấp chuột phải vào một vị trí trống trong mô hình của bạn trong Trình thiết kế EF và chọn Add Code Generation Item…

Tạo mã model sử dụng DbContext API

Bạn sẽ thấy hộp thoại Add New Item sau đây mở ra.

Tạo mã model sử dụng DbContext API

Bước 2 - Chọn EF 6.x DbContext Generator ở khung giữa và đặt tên là ModelFirstDemoModel.

Bước 3 - Bạn sẽ thấy ModelFirstDemoModel.Context.ttModelFirstDemoModel.tt được tạo trong Solution Explorer.

ModelFirstDemoModel.Context.tt và ModelFirstDemoModel.tt trong Solution Explorer

ModelFirstDemoModel.Context tạo DbCcontext và các thực thể Student, Course và Enrollment.

Lớp Course được tự động sinh ra

Đoạn mã C# dưới đây sẽ thêm và truy xuất thông tin Student từ ​​cơ sở dữ liệu.

using System;
using System.Linq;

namespace EFModelFirstDemo 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         using (var db = new ModelFirstDemoDBContext()) 
         {
            // Create and save a new Student
            Console.Write("Enter a name for a new Student: ");
            var firstName = Console.ReadLine();

            var student = new Student 
            {
               StudentID = 1,
               FirstName = firstName
            };
				
            db.Students.Add(student);
            db.SaveChanges();
				
            var query = from b in db.Students
               orderby b.FirstName select b;

            Console.WriteLine("All student in the database:");

            foreach (var item in query) 
            {
               Console.WriteLine(item.FirstName);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
         }
      }
   }
}

Khi đoạn mã trên được thực thi, bạn sẽ nhận được đầu ra sau:

Enter a name for a new Student:
Ali Khan
All student in the database:
Ali Khan
Press any key to exit...

Chúng tôi khuyên bạn nên thực hiện ví dụ trên theo cách từng bước để hiểu rõ hơn

Database First trong Entity Framework

Trong phần này, chúng ta hãy tìm hiểu về việc tạo một mô hình dữ liệu thực thể với cách tiếp cận Database First.

  • Phương pháp tiếp cận Database First cung cấp một giải pháp thay thế cho phương pháp tiếp cận Code First và Model First đối với mô hình dữ liệu thực thể. Nó tạo mã mô hình (các lớp, thuộc tính, DbContext, v.v.) từ cơ sở dữ liệu trong dự án.
  • Phương pháp tiếp cận Database First tạo khung thực thể từ cơ sở dữ liệu hiện có. Chúng tôi sử dụng tất cả các chức năng khác, chẳng hạn như đồng bộ hóa mô hình / cơ sở dữ liệu và tạo mã, giống như cách chúng tôi sử dụng chúng trong phương pháp Model First.

Hãy lấy một ví dụ đơn giản. Chúng tôi đã có một cơ sở dữ liệu chứa 3 bảng như trong hình dưới đây.

Thiết lập cơ sở dữ liệu

Bước 1 - Hãy tạo một dự án Console mới với tên DatabaseFirstDemo.

Bước 2 - Để tạo mô hình, trước tiên, nhấp chuột phải vào dự án của bạn trong Solution Explorer và chọn Add → New Items ...

Bước 3 - Chọn ADO.NET Entity Data Model từ ngăn giữa và đặt tên là DatabaseFirstModel.

Bước 4 - Nhấp vào nút Add sẽ khởi chạy hộp thoại Entity Data Model Wizard.

Bước 5 - Chọn EF Designer từ cơ sở dữ liệu và nhấp vào nút Next.

Bước 6 - Chọn cơ sở dữ liệu hiện có và nhấp vào Next.

Bước 7 - Chọn Entity Framework 6.x và nhấn Next.

e

Bước 8 - Chọn tất cả các tables, views và stored procedures bạn muốn đưa vào và nhấp vào Finish.

Bạn sẽ thấy mô hình thực thể và các lớp POCO được tạo từ cơ sở dữ liệu.

Bây giờ chúng ta lấy tất cả các sinh viên từ cơ sở dữ liệu bằng cách viết đoạn mã sau vào file program.cs.

using System;
using System.Linq;

namespace DatabaseFirstDemo 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         using (var db = new UniContextEntities()) 
         {
            var query = from b in db.Students
                        orderby b.FirstMidName 
                        select b;

            Console.WriteLine("All All student in the database:");

            foreach (var item in query) 
            {
               Console.WriteLine(item.FirstMidName +" "+ item.LastName);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
         }
      }
   }
}

Khi chương trình trên được thực thi, bạn sẽ nhận được đầu ra sau

All student in the database:
Ali Khan
Arturo   finand
Bill Gates
Carson Alexander
Gytis Barzdukas
Laura Norman
Meredith Alonso
Nino Olivetto
Peggy Justice
Yan Li
Press any key to exit...

Khi chương trình trên được thực thi, bạn sẽ thấy tất cả tên của sinh viên đã được nhập trước đó trong cơ sở dữ liệu.

Chúng tôi khuyên bạn nên thực hiện ví dụ trên theo cách từng bước để hiểu rõ hơn.

Nên sử dụng cách tiếp cận nào

Trong phần này, chúng ta sẽ xem xét nên sử dụng Code First, Model First hay Database First để tạo mô hình dữ liệu. Sau đây là một số hướng dẫn sẽ giúp bạn quyết định nên chọn cái nào.

Nên sử dụng cách tiếp cận nào
  • Nếu bạn đã có cơ sở dữ liệu thì Database First là lựa chọn tốt nhất dành cho bạn.
  • Nếu bạn muốn sử dụng Visual Designer cho một dự án hoàn toàn mới mà không có cơ sở dữ liệu, thì bạn nên sử dụng Model First.
  • Nếu bạn chỉ muốn làm việc với mã thì Code First là lựa chọn tốt nhất dành cho bạn.
  • Nếu bạn đã có sẵn các lớp, thì cách tốt nhất của bạn là sử dụng chúng với Code First.


Bài viết liên quan:

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.

Tạo ứng dụng .NET Core Console đầu tiên và cấu hình sử dụng 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.