Entity Framework - DbContext

Entity Framework vous permet d'interroger, d'insérer, de mettre à jour et de supprimer des données à l'aide d'objets CLR (Common Language Runtime) appelés entités. Entity Framework mappe les entités et les relations définies dans votre modèle à une base de données. Il fournit également des installations pour -

  • Matérialiser les données renvoyées par la base de données en tant qu'objets d'entité
  • Suivre les modifications apportées aux objets
  • Gérer la concurrence
  • Propager les modifications d'objet dans la base de données
  • Lier des objets à des contrôles

La classe principale responsable de l'interaction avec les données en tant qu'objets est System.Data.Entity.DbContext. L'API DbContext n'est pas publiée dans le cadre du .NET Framework. Afin d'être plus flexible et plus fréquente avec la publication de nouvelles fonctionnalités dans Code First et l'API DbContext, l'équipe Entity Framework distribue EntityFramework.dll via la fonctionnalité de distribution NuGet de Microsoft.

  • NuGet vous permet d'ajouter des références à vos projets .NET en extrayant les DLL pertinentes directement dans votre projet à partir du Web.

  • Une extension Visual Studio appelée Library Package Manager fournit un moyen simple d'extraire l'assembly approprié du Web dans vos projets.

  • L'API DbContext vise principalement à simplifier votre interaction avec Entity Framework.

  • Cela réduit également le nombre de méthodes et de propriétés dont vous avez besoin pour accéder aux tâches couramment utilisées.

  • Dans les versions précédentes d'Entity Framework, ces tâches étaient souvent compliquées à découvrir et à coder.

  • La classe de contexte gère les objets d'entité pendant l'exécution, ce qui comprend le remplissage d'objets avec des données d'une base de données, le suivi des modifications et la persistance des données dans la base de données.

Définition d'une classe dérivée DbContext

La méthode recommandée pour travailler avec le contexte consiste à définir une classe qui dérive de DbContext et expose les propriétés DbSet qui représentent des collections des entités spécifiées dans le contexte. Si vous travaillez avec EF Designer, le contexte sera généré pour vous. Si vous travaillez avec Code First, vous écrirez généralement vous-même le contexte.

Le code suivant est un exemple simple qui montre qu'UniContext est dérivé de DbContext.

  • Vous pouvez utiliser des propriétés automatiques avec DbSet telles que getter et setter.

  • Cela crée également un code beaucoup plus propre, mais vous n'êtes pas obligé de l'utiliser pour créer un DbSet lorsque vous n'avez aucune autre logique à appliquer.

public class UniContext : DbContext {
   public UniContext() : base("UniContext") { }
   public DbSet<Student> Students { get; set; }
   public DbSet<Enrollment> Enrollments { get; set; }
   public DbSet<Course> Courses { get; set; }
}
  • Auparavant, EDM générait des classes de contexte dérivées de la classe ObjectContext.

  • Travailler avec ObjectContext était un peu complexe.

  • DbContext est un wrapper autour d'ObjectContext qui est en fait similaire à ObjectContext et est utile et facile dans tous les modèles de développement tels que Code First, Model First et Database First.

Requêtes

Il existe trois types de requêtes que vous pouvez utiliser, telles que -

  • Ajout d'une nouvelle entité.
  • Modification ou mise à jour des valeurs de propriété d'une entité existante.
  • Supprimer une entité existante.

Ajout de nouvelles entités

L'ajout d'un nouvel objet avec Entity Framework est aussi simple que la construction d'une nouvelle instance de votre objet et son enregistrement à l'aide de la méthode Add sur DbSet. Le code suivant est destiné lorsque vous souhaitez ajouter un nouvel étudiant à la base de données.

private static void AddStudent() {

   using (var context = new UniContext()) {

      var student = new Student {
         LastName = "Khan", 
         FirstMidName = "Ali", 
         EnrollmentDate = DateTime.Parse("2005-09-01") 
      };

      context.Students.Add(student); 
      context.SaveChanges();

   }
}

Modification des entités existantes

La modification des objets existants est aussi simple que la mise à jour de la valeur attribuée aux propriétés que vous souhaitez modifier et l'appel de SaveChanges. Dans le code suivant, le nom de famille d'Ali a été changé de Khan à Aslam.

private static void AddStudent() {

   private static void ChangeStudent() {

      using (var context = new UniContext()) {

         var student = (from d in context.Students
            where d.FirstMidName == "Ali" select d).Single();
         student.LastName = "Aslam";
         context.SaveChanges();

      }
   }
}

Suppression d'entités existantes

Pour supprimer une entité à l'aide d'Entity Framework, vous utilisez la méthode Remove sur DbSet. Supprimez les œuvres des entités existantes et nouvellement ajoutées. L'appel de Remove sur une entité qui a été ajoutée mais pas encore enregistrée dans la base de données annulera l'ajout de l'entité. L'entité est supprimée du suivi des modifications et n'est plus suivie par le DbContext. L'appel de Remove sur une entité existante qui fait l'objet d'un suivi des modifications enregistrera l'entité pour suppression la prochaine fois que SaveChanges sera appelé. L'exemple suivant montre une instance où l'étudiant est supprimé de la base de données dont le prénom est Ali.

private static void DeleteStudent() {

   using (var context = new UniContext()) {
      var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
      context.Students.Remove(bay);
      context.SaveChanges();
   }
}