Partager via


Prise en main d’Entity Framework Core

Dans ce tutoriel, vous allez créer une application Xamarin.Forms qui effectue l’accès aux données sur une base de données SQLite à l’aide d’Entity Framework Core.

Vous pouvez suivre le didacticiel à l’aide de Visual Studio sur Windows ou Visual Studio pour Mac.

Pourboire

Vous pouvez afficher l'exemple de cet article sur GitHub.

Conditions préalables

Installez l'un des éléments ci-dessous :

Cette documentation fournit des instructions détaillées d’installation pas à pas pour chaque plateforme.

Télécharger et exécuter l’exemple de projet

Pour exécuter et explorer cet exemple d’application, téléchargez le code sur GitHub.

Une fois téléchargé, ouvrez le fichier solution EFGettingStarted.sln dans Visual Studio ou Visual Studio pour Mac et exécutez l’application sur la plateforme de votre choix.

Au démarrage de l’application, elle remplit la base de données SQLite locale avec deux entrées représentant des blogs.

Capture d’écran de toutes les pages de liste de blogs

Cliquez sur le bouton Ajouter dans la barre d’outils.

Une nouvelle page s’affiche pour vous permettre d’entrer des informations sur un nouveau blog.

Capture d’écran de la nouvelle page de modification de blog

Renseignez toutes les informations, puis cliquez sur Enregistrer à partir de la barre d’outils. Le nouveau blog enregistre dans la base de données SQLite de l’application et s’affiche dans la liste.

Vous pouvez cliquer sur l’une des entrées de blog de la liste et afficher les billets de ce blog.

Capture d’écran de page de liste des billets de blog

Cliquez sur Ajouter dans la barre d’outils.

Une page s’affiche alors qui vous permet de renseigner des informations sur un nouveau billet de blog.

Capture d’écran de l’ajout d’une nouvelle page de publication

Renseignez toutes les informations, puis cliquez sur Enregistrer dans la barre d’outils.

Le nouveau billet sera associé au billet de blog sur lequel vous avez cliqué à l’étape précédente et enregistrera dans la base de données SQLite de l’application et s’affiche dans la liste.

Revenez à la page de liste de blog. Cliquez sur Supprimer toutes les dans la barre d’outils. Tous les blogs et leurs billets correspondants seront ensuite supprimés de la base de données SQLite de l’application.

capture d’écran de l’application avec tous les blogs supprimés

Explorer le code

Les sections suivantes vous guident tout au long du code de l’exemple de projet qui lit, crée, met à jour et supprime des données d’une base de données SQLite à l’aide d’EF Core avec Xamarin.Forms.

Il est supposé que vous êtes familiarisé avec les rubriques Xamarin.Forms de affichant des données et naviguer entre les pages.

Important

Entity Framework Core utilise la réflexion pour appeler les fonctions que l’éditeur de liens Xamarin.iOS peut supprimer pendant configurations en mode Release. Vous pouvez éviter cela de deux façons.

  • La première consiste à ajouter --linkskip System.Core dans les arguments mtouch supplémentaires des options de build iOS .
  • Vous pouvez également définir le comportement de l’éditeur de liens Xamarin.iOS sur Don't Link dans les options build iOS. Cet article explique plus en détail l’éditeur de liens Xamarin.iOS notamment comment définir le comportement sur Xamarin.iOS. (Cette approche n’est pas idéale, car elle peut entraîner le rejet du magasin).

Packages NuGet pour Entity Framework Core

Pour créer des applications Xamarin.Forms avec EF Core, vous installez le package pour le ou les fournisseurs de base de données EF Core que vous souhaitez cibler dans tous les projets de la solution Xamarin.Forms. Ce tutoriel utilise le fournisseur SQLite.

Le package NuGet suivant est nécessaire dans chacun des projets de la solution Xamarin.Forms.

  • Microsoft.EntityFrameworkCore.Sqlite

Classes de modèle

Chaque table de la base de données SQLite accessible via EF Core est modélisée dans une classe. Dans cet exemple, deux classes sont utilisées : Blog et Post qui se trouvent dans le dossier Models.

Les classes de modèle sont composées uniquement de propriétés, qui modélisent les colonnes dans la base de données.

  • Blog.cs

    using System;
    using System.Collections.Generic;
    
    namespace EFGetStarted
    {
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public List<Post> Posts { get; set; } = new List<Post>();
        }
    }
    
  • La propriété Posts définit une relation parent-enfant entre Blog et Post.

  • Post.cs

    using System;
    namespace EFGetStarted
    {
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }
    
  • Les propriétés BlogId et Blog sont associées à l’objet Blog parent pour l’instance du Post.

Contexte de données

La classe BloggingContext se trouve dans le dossier Services et hérite de la classe EF Core DbContext. Une DbContext est utilisée pour regrouper les requêtes de base de données et les modifications.

using System;
using System.IO;
using Microsoft.EntityFrameworkCore;
using Xamarin.Essentials;

namespace EFGetStarted
{
    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }

        public BloggingContext()
        {
            SQLitePCL.Batteries_V2.Init();

            this.Database.EnsureCreated();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string dbPath = Path.Combine(FileSystem.AppDataDirectory, "blogs.db3");

            optionsBuilder
                .UseSqlite($"Filename={dbPath}");
        }
    }
}
  • Les deux propriétés de cette classe de type DbSet sont utilisées pour fonctionner sur les tables sous-jacentes représentant blogs et billets.
  • Le SQLitePCL.Batteries_V2.Init() est nécessaire dans le constructeur pour lancer SQLite sur iOS.
  • La fonction OnConfiguring configure l’emplacement de la base de données SQLite sur l’appareil physique.

Créer, lire, mettre à jour & supprimer

Voici quelques instances de l’application où EF Core est utilisé pour accéder à SQLite.

Lire

  • Retourne tous les enregistrements.

    • La fonction OnAppearing de BlogsPage.xaml.cs retourne tous les enregistrements Blog et les stocke dans une variable List.

      using (var blogContext = new BloggingContext())
      {
          var theBlogs = blogContext.Blogs.ToList();
      }
      
  • Retourne des enregistrements spécifiques.

    • La fonction OnAppearing de PostsPage.xaml.cs renvoie Post enregistrements contenant un BlogIdspécifique.

      using (var blogContext = new BloggingContext())
      {
          var postList = blogContext.Posts
              .Where(p => p.BlogId == BlogId)
              .ToList();
      }
      

Créer

  • Insérez un nouvel enregistrement.
    • La fonction Save_Clicked de AddBlogPage.xaml.cs insère un nouvel objet Blog dans la base de données SQLite.

      var blog = new Blog { Url = blogUrl.Text };
      
      using (var blogContext = new BloggingContext())
      {
          blogContext.Add(blog);
      
          await blogContext.SaveChangesAsync();
      }
      

Mettre à jour

  • Mettez à jour un enregistrement existant.
    • La fonction Save_Clicked de AddPostPage.xaml.cs met à jour un objet Blog existant avec une nouvelle Post.

      var newPost = new Post
      {
          BlogId = BlogId,
          Content = postCell.Text,
          Title = titleCell.Text
      };
      
      using (var blogContext = new BloggingContext())
      {
          var blog = await blogContext
              .Blogs
              .FirstAsync(b => b.BlogId == BlogId);
      
          blog.Posts.Add(newPost);
      
          await blogContext.SaveChangesAsync();
      }
      

Supprimer

  • Supprimez tous les enregistrements avec effet de cascade sur les enregistrements enfants.
    • La fonction DeleteAll_Clicked de BlogsPage.xaml.cs supprime tous les enregistrements Blog dans la base de données SQLite et applique les suppressions à tous les enregistrements enfants BlogPost.

      using (var blogContext = new BloggingContext())
      {
          blogContext.RemoveRange(blogContext.Blogs);
      
          await blogContext.SaveChangesAsync();
      }
      

Étapes suivantes

Dans cette prise en main, vous avez appris à utiliser une application Xamarin.Forms pour accéder à une base de données SQLite à l’aide d’Entity Framework Core.