Hướng dẫn many to many trong entity framework code first năm 2024

EDM là một mô hình mà ở đó mô tả các thực thể và những quan hệ giữa chúng. Hãy tạo một EDM đơn giản đầu tiên cho CSDL SchoolDB sử dụng Visual Studio 2012 và Entity Framework 6.

  1. Mở Visual Studio 2012 và tạo một console project.

Tới PROJECT menu của visual studio -> {project name} properties – và chắc chắn rằng target framework của project là .NET Framework 4.5 như dưới đây:

2. Giờ chúng ta thêm EDM bằng cách click chuột phải vào project trong solution explorer-> Add -> click New Item và chọn ADO.NET Entity Data Model từ hộp thoại, đặt tên là ‘School’ và click nút Add.

3. Entity Data Model Wizard trong VS2012 mở ra với 4 lựa chọn: EF Designer from database cho phương pháp tiếp cận Database First, Empty EF Designer model cho phương pháp tiếp cận Model First, Empty Code First model và Code First from database cho phương pháp tiếp cận Code First. Chúng ta sẽ tập trung vào phương pháp tiếp cận Database-First trong những bài hướng dẫn cơ bản này vì vậy chọn EF Designer from database và click Next.

4. Bạn có thể chọn từ DB Connections sẵn có của bạn hoặc tạo một kết nối mới bằng cách bấm nút ‘New Connection’. Chúng ta sẽ sử dụng DB connection sẵn có tới CSDL SchoolDB. Thao tác này cũng sẽ thêm một connection string tới file app.config của bạn với hậu tố mặc định là tên CSDL. Bạn có thể đổi cái này nếu bạn muốn. Click ‘Next’ sau khi bạn cài đặt DB connection của bạn.

5. Trong bước này bạn cần chọn phiên bản của Entity Framework. Chúng ta sẽ sử dụng Entity Framework 6.0 trong các bài hướng dẫn cơ bản vì vậy chọn Entity Framework 6.0 và click Next.

Note: Nếu bạn đã cài đặt phiên bản mới nhất của Entity Framework sử dụng NuGet manager như trong bài Cài đặt môi trường rồi bước này của wizard sẽ không xuất hiện khi bạn đã cài đặt Entity Framework.

  1. Bước này sẽ hiển thị tất cả Tables, Views và Stored Procedures (SP) trong CSDL. Lựa chọn Tables, Views and SPs bạn muốn và giữ các checkbox mặc định rồi click ‘Finish’. Bạn có thể đổi Model Namespace nếu bạn muốn.

Note:

Pluralize or singularize generated object names checkbox chuyển tên một tập thực thể thành số ít, nếu tên bảng trong CSDL là số nhiều. VD: nếu SchoolDB có tên bảng Students rồi tập thực thể sẽ chuyển thành số ít Student. Tương tự quan hệ giữa những model sẽ là số nhiều nếu bảng có những quan hệ one-to-many hoặc many-to-many với những bảng khác. VD: bảng Student có quan hệ many-to-many với bảng Course vậy tập thực thể Student sẽ có tên thuộc tính số nhiều ‘Courses’ cho một tập hợp các khóa học.

Checkbox thứ hai, Include foreign key columns in the model, gồm thuộc tính khóa ngoại rõ ràng để trình bày cho khóa ngoại. VD: bảng Student có quan hệ one-to-many với bảng Standard. Vậy mỗi sinh viên được kết hợp với chỉ một standard. Để trình bày điều này trong mô hình, tập thực thể Student gồm thuộc tính StandardId với thuộc tính điều hướng Standard. Nếu checkbox này là uncheck rồi nó sẽ chỉ có thuộc tính Standard, mà không có StandardId trong tập thực thể Student.

The third checkbox, Import selected stored procedures and functions into entity model, automatically creates Function Imports for the stored procedures and functions. You don’t need to manually import this, as was necessary prior to Entity Framework 5.0.

Checkbox thứ ba, Import selected stored procedures and functions into entity model, tự động tạo Function Imports cho các stored procedures và functions. Bạn không cần import thủ công

  1. Sau khi click ‘Finish’, một file School.edmx sẽ được thêm vào project của bạn.

Mở EDM designer bằng cách double click file School.edmx. File này sẽ hiện thị tất cả các thực thể của các bảng bạn đã chọn và những quan hệ giữa chúng như bên dưới:

EDM cũng thêm một chuỗi kết nối vào file config như dưới đây:





  

<connectionStrings>

Theo cách này bạn có thể tạo một EDM đơn giản từ CSDL hiện tại của bạn.

Bây giờ chúng ta sẽ thử kiểm tra tất cả các khối xây dựng khi khởi tạo EDM (School.edmx) như hình minh họa bên trên.

Entity-Table Mapping:

Mỗi thực thể trong EDM là nối với bảng của CSDL. Bạn có thể kiểm tra entity-table mapping bằng cách click vào bất kỳ thực thể nào trong EDM designer -> chọn Table Mapping. Cũng như nếu bạn thay đổi bất kỳ tên thuộc tính của thực thể từ designer rồi table mapping sẽ ánh xạ thay đổi đó tự động.

Context & Entity Classes:

Mỗi Entity Data Model khởi tạo một lớp context và lớp thực thể cho mỗi bảng CSDL trong EDM. Mở rộng School.edmx và bạn sẽ thấy hai file quan trọng {EDM Name}.Context.tt và {EDM Name}.tt:

School.Context.tt: File mẫu T4 này khởi tạo một lớp context bất cứ khi nào bạn thay đổi Entity Data Model (.edmx file). Bạn có thể thấy file context bằng cách mở rộng School.Context.tt. Lớp context lưu trú trong file {EDM Name}.context.cs. Lớp context mặc định là {DB Name} + Entities. VD: tên lớp context cho SchoolDB là SchoolDBEntities rồi lớp context sẽ dẫn xuất từ lớp DBContext trong Entity Framework. (Trước EF 5.0 nó được dẫn xuất từ ObjectContext)

School.tt: là một file T4 mẫu khởi tạo các lớp thực thể cho mỗi bảng của CSDL. Các lớp thực thể là những lớp POCO (Plain Old CLR Object). Đoạn mã sau trình bày cho thực thể Student

public partial class Student {

public Student()
{
    this.Courses = new HashSet();
}
public int StudentID { get; set; }
public string StudentName { get; set; }
public Nullable StandardId { get; set; }
public byte[] RowVersion { get; set; }
public virtual Standard Standard { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
public virtual ICollection Courses { get; set; }
}

EDM Designer: trình bày mô hình quan niệm của bạn. Nó bao gồm Entities, những liên kết và bội số giữa những thực thể. Ban đầu, nó sẽ trông giống chính xác cấu trúc bảng CSDL của bạn nhưng bạn có thể thêm, gộp hoặc xóa cột, và nó không yêu cầu bởi ứng dụng của bạn từ designer này. Bạn có thể thậm chí thêm một đối tượng mới trong mô hình này, nó có thể có những cột từ các bảng khác nhau từ menu context như hình bên trên. Nhớ rằng bất cứ sự thay đổi nào thực hiện ở đây điều nối với storage model. Vi vậy bạn phải cẩn thận trong khi thực hiện bất kỳ sự thay đổi nào trong designer.

You can open this EDM designer in XML view where you can see all the three parts of the EDM – Conceptual schema (CSDL), Storage schema (SSDL) and mapping schema (MSL), together in XML view.

Bạn có thể mở EDM designer này trong XML và có thể nhìn thấy tất cả ba phần của EDM – Conceptual schema (CSDL), Storage schema (SSDL) và mapping schema (MSL), cùng trong XML view.

Click chuột phải trên School.edmx -> click ‘Open with..’, sẽ mở một cửa sổ.

Chọn ‘XML (text) Editor’ trong cửa sổ.

Visual Studio không thể hiển thị model trong Design view và trong XML format ở cùng thời điểm, vì vậy bạn sẽ nhìn thấy một tin nhắn hỏi nó có OK để đóng Design view của model. Click Yes. Và nó sẽ mở XML format view. Bạn có thể nhìn thấy XML view sau bằng cách mở tất cả tóm tắt như bên dưới:

Bạn có thể nhìn thấy nội dung SSDL (Store schema definition language), nội dung CSDL (Common Schema Definition Language) và nội dung C-S mapping ở đây. Nếu bạn mở rộng SSDL và CSDL, mỗi cái có vài nốt XML thông thường dưới mỗi nốt schema. Bạn không cần chỉnh sửa dữ liệu XML bởi vì dữ liệu này có thể thực hiện dễ dàng hơn trong Model Browser.