Entity Framework - Base de données de base

Dans Entity Framework, Seed a été introduit dans EF 4.1 et fonctionne avec les initialiseurs de base de données. L'idée générale d'unSeed Methodconsiste à initialiser les données dans une base de données créée par Code First ou évoluée par les migrations. Ces données sont souvent des données de test, mais peuvent également être des données de référence telles que des listes d'étudiants connus, des cours, etc. Lorsque les données sont initialisées, il effectue les opérations suivantes -

  • Vérifie si la base de données cible existe déjà ou non.
  • Si tel est le cas, le modèle Code First actuel est comparé au modèle stocké dans les métadonnées de la base de données.
  • La base de données est supprimée si le modèle actuel ne correspond pas au modèle de la base de données.
  • La base de données est créée si elle a été supprimée ou n'existait pas en premier lieu.
  • Si la base de données a été créée, la méthode de l'initialiseur Seed est appelée.

La méthode Seed prend l'objet de contexte de base de données comme paramètre d'entrée et le code de la méthode utilise cet objet pour ajouter de nouvelles entités à la base de données. Pour amorcer des données dans votre base de données, vous devez remplacer la méthode Seed. Jetons un coup d'œil à l'exemple suivant dans lequel certaines des données par défaut sont initiées dans la base de données dans une classe interne.

private class UniDBInitializer<T> : DropCreateDatabaseAlways<MyContext> {

   protected override void Seed(MyContext context) {

      IList<Student> students = new List<Student>();

      students.Add(new Student() {
         FirstMidName = "Andrew", 
         LastName = "Peters", 
         EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
      });

      students.Add(new Student() {
         FirstMidName = "Brice", 
         LastName = "Lambson", 
         EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
      });

      students.Add(new Student() {
         FirstMidName = "Rowan", 
         LastName = "Miller", 
         EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
      });

      foreach (Student student in students)
      context.Students.Add(student);
      base.Seed(context);
   }
}

Dans le code ci-dessus, la table des étudiants est initialisée. Vous devez définir cette classe d'initialisation de base de données dans la classe de contexte comme indiqué dans le code suivant.

public MyContext() : base("name=MyContextDB") {
   Database.SetInitializer<MyContext>(new UniDBInitializer<MyContext>());
}

Voici l'implémentation de classe complète de la classe MyContext, qui contient également la classe d'initialisation DB.

public class MyContext : DbContext {

   public MyContext() : base("name=MyContextDB") {
      Database.SetInitializer<MyContext>(new UniDBInitializer<MyContext>());
   }

   public virtual DbSet<Course> Courses { get; set; }
   public virtual DbSet<Enrollment> Enrollments { get; set; }
   public virtual DbSet<Student> Students { get; set; }
	
   private class UniDBInitializer<T> : DropCreateDatabaseAlways<MyContext> {

      protected override void Seed(MyContext context) {

         IList<Student> students = new List<Student>();
			
         students.Add(new Student() {
            FirstMidName = "Andrew", 
            LastName = "Peters", 
            EnrollmentDate = DateTime.Parse(DateTime.Today.ToString()) 
         });

         students.Add(new Student() {
            FirstMidName = "Brice", 
            LastName = "Lambson", 
            EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
         });

         students.Add(new Student() {
            FirstMidName = "Rowan", 
            LastName = "Miller", 
            EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
         });

         foreach (Student student in students)
         context.Students.Add(student);
         base.Seed(context);
      }
   } 
}

Lorsque l'exemple ci-dessus est compilé et exécuté, vous pouvez voir les données dans une base de données comme indiqué dans l'image suivante.

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