Entity Framework - Types d'entités imbriquées

Avant Entity Framework 6, Entity Framework ne reconnaissait pas les entités ou les types complexes imbriqués dans d'autres entités ou types complexes. Lorsque Entity Framework a généré le modèle, les types imbriqués ont simplement disparu.

Jetons un coup d'œil à un exemple simple dans lequel nous avons notre modèle de base avec trois entités Étudiant, Cours et Inscription.

  • Ajoutons une propriété Identity, qui est un type Person. Person est une autre entité, contient les propriétés BirthDate et FatherName.

  • En termes d'Entity Framework, comme il n'a pas d'identité et fait partie d'une entité, il s'agit d'un type complexe Entity Framework, et nous avons en fait pris en charge les types complexes depuis la première version d'Entity Framework.

  • Le type Person n'est pas imbriqué comme indiqué dans le code suivant.

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 saura également comment conserver les types de personne lorsqu'il est utilisé dans les versions précédentes.

En utilisant Entity Framework Power Tool, nous verrons comment Entity Framework interprète le modèle. Cliquez avec le bouton droit sur le fichier Program.cs et sélectionnez Entity Framework → Afficher le modèle de données d'entité (lecture seule)

Vous verrez maintenant que la propriété Identity est définie dans la classe Student.

Si cette classe Person ne sera utilisée par aucune autre entité, nous pouvons l'imbriquer dans la classe Student, mais cette version antérieure d'Entity Framework ne reconnaît pas les types imbriqués.

Dans les anciennes versions, vous générez à nouveau le modèle, non seulement le type n'est pas reconnu, mais comme il n'y est pas, la propriété n'y est pas non plus, donc Entity Framework ne persistera pas du tout le type 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; }
   }
}

Avec Entity Framework 6, les entités imbriquées et les types complexes sont reconnus. Dans le code ci-dessus, vous pouvez voir que Person est imbriqué dans la classe Student.

Lorsque vous utilisez l'outil d'alimentation Entity Framework pour montrer comment Entity Framework interprète le modèle cette fois, il existe une véritable propriété Identity et un type complexe Person. Donc Entity Framework conservera ces données.

Vous pouvez maintenant voir que Identity est un type d'entité imbriqué, qui n'était pas pris en charge avant Entity Framework 6.

Nous vous recommandons d'exécuter l'exemple ci-dessus étape par étape pour une meilleure compréhension.