Khung thực thể - Các loại thực thể lồng nhau

Trước Entity Framework 6, Entity Framework không nhận ra các thực thể hoặc kiểu phức tạp được lồng trong các thực thể hoặc kiểu phức tạp khác. Khi Entity Framework tạo mô hình, các kiểu lồng nhau chỉ biến mất.

Hãy xem một ví dụ đơn giản, trong đó chúng ta có mô hình cơ bản của chúng ta với ba thực thể Sinh viên, Khóa học và Ghi danh.

  • Hãy thêm thuộc tính Identity, là kiểu Person. Person là một thực thể khác, chứa các thuộc tính Ngày sinh và Tên cha.

  • Trong các điều khoản của Entity Framework, vì nó không có danh tính và là một phần của thực thể, nó là một loại phức tạp Entity Framework và chúng tôi thực sự đã hỗ trợ cho các loại phức tạp kể từ phiên bản đầu tiên của Entity Framework.

  • Loại Người không được lồng vào nhau như được hiển thị trong đoạn mã sau.

public class Student {
   public int ID { get; set; }
   public string LastName { get; set; }
   public string FirstMidName { get; set; }
   public DateTime EnrollmentDate { get; set; }
   public Person Identity { get; set; }
	
   public virtual ICollection<Enrollment> Enrollments { get; set; }
}

public class Person {

   public Person(string fatherName, DateTime birthDate) {
      FatherName = fatherName;
      BirthDate = birthDate;
   }
	
   public string FatherName { get; set; }
   public DateTime BirthDate { get; set; }
}

Entity Framework sẽ biết cách duy trì các loại Person khi nó cũng được sử dụng trong các phiên bản trước.

Bằng cách sử dụng Entity Framework Power Tool, chúng ta sẽ thấy cách Entity Framework diễn giải mô hình. Nhấp chuột phải vào tệp Program.cs và chọn Khung thực thể → Xem Mô hình Dữ liệu Thực thể (Chỉ đọc)

Bây giờ bạn sẽ thấy thuộc tính Identity được định nghĩa trong lớp Sinh viên.

Nếu lớp Person này không được sử dụng bởi bất kỳ thực thể nào khác, thì chúng ta có thể lồng nó vào bên trong lớp Student, nhưng phiên bản Entity Framework trước đó không thừa nhận các kiểu lồng nhau.

Trong phiên bản cũ hơn, bạn tạo lại mô hình, không chỉ kiểu không được nhận dạng, mà bởi vì nó không có ở đó, thuộc tính cũng không ở đó, vì vậy Entity Framework sẽ không tồn tại kiểu Person.

public class Student {
   public int ID { get; set; }
   public string LastName { get; set; }
   public string FirstMidName { get; set; }
	
   public DateTime EnrollmentDate { get; set; }
   public Person Identity { get; set; }
	
   public virtual ICollection<Enrollment> Enrollments { get; set; }

   public class Person {

      public Person(string fatherName, DateTime birthDate) {
         FatherName = fatherName;
         BirthDate = birthDate;
      }

      public string FatherName { get; set; }
      public DateTime BirthDate { get; set; }
   }
}

Với Entity Framework 6, các thực thể lồng nhau và các kiểu phức tạp được công nhận. Trong đoạn mã trên, bạn có thể thấy Người được lồng trong lớp Sinh viên.

Khi bạn sử dụng Công cụ Power của Entity Framework để hiển thị cách Entity Framework diễn giải mô hình lần này, có thuộc tính Identity thực và kiểu phức hợp Person. Vì vậy, Entity Framework sẽ duy trì dữ liệu đó.

Bây giờ bạn có thể thấy rằng Identity là một loại thực thể lồng nhau, không được hỗ trợ trước Entity Framework 6.

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.