Prise en main d’EF Core et de Xamarin

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

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

Conseil

Vous pouvez afficher cet exemple sur GitHub.

Prérequis

Installez l’un des éléments suivants :

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

Téléchargez et exécutez 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.

Lorsque l’application démarre pour la première fois, elle remplit la base de données SQLite locale avec deux entrées représentant des blogs.

Screenshot of all blogs list page

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

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

Screenshot of new blog edit page

Renseignez toutes les informations, puis cliquez sur Enregistrer depuis la barre d’outils. Le nouveau blog est enregistré 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 pour afficher les publications de ce blog.

Screenshot of blog posts list page

Cliquez sur Ajouter dans la barre d’outils.

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

Screenshot of add new post page

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

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

Revenez à la page de la liste des blogs. Cliquez sur Tout supprimer dans la barre d’outils. Tous les blogs et leurs publications correspondantes sont ensuite supprimés de la base de données SQLite de l’application.

Screenshot of app with all blogs deleted

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 connaissez les rubriques Xamarin.Forms d’affichage des données et de navigation entre les pages.

Important

Entity Framework Core utilise la réflexion pour appeler des fonctions que l’éditeur de liens Xamarin.iOS peut supprimer pendant les configurations en mode Mise en production. Vous pouvez éviter cela de deux manières.

  • La première consiste à ajouter --linkskip System.Core aux Arguments mtouch supplémentaires dans les options deBuild iOS.
  • Vous pouvez également définir le Comportement de l’éditeur de liens Xamarin.iOS sur Don't Link dans les options de 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 un rejet du magasin).

Packages NuGet Entity Framework Core

Pour créer des applications Xamarin.Forms avec EF Core, vous devez installer le package du ou des 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 des 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 représente une relation parent-enfant entre Blog and 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 DbContext d’EF Core. La classe DbContext est utilisée pour regrouper les requêtes à la base de données et les modifications qui y sont apportées.

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 des Blogs et des Posts.
  • L’appel à SQLitePCL.Batteries_V2.Init() est nécessaire dans le constructeur pour lancer SQLite sur iOS.
  • La fonction OnConfiguring définit l’emplacement de la base de données SQLite sur l’appareil physique.

Créer, lire, mettre à jour et supprimer

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

Lire

  • Retourner 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();
}
  • Retourner des enregistrements spécifiques.
    • La fonction OnAppearing de PostsPage.xaml.cs retourne des enregistrements Post qui contiennent un BlogId spécifique.
using (var blogContext = new BloggingContext())
{
    var postList = blogContext.Posts
        .Where(p => p.BlogId == BlogId)
        .ToList();
}

Créer

  • Insérer 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

  • Mettre à jour un enregistrement existant.
    • La fonction Save_Clicked de AddPostPage.xaml.cs met à jour un objet Blog existant avec un nouveau 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

  • Supprimer tous les enregistrements et supprimer en cascade les enregistrements enfants.
    • La fonction DeleteAll_Clicked de BlogsPage.xaml.cs supprime tous les enregistrements Blog de la base de données SQLite et supprime en cascade sur l’enfant Blog tous les enregistrements Post.
using (var blogContext = new BloggingContext())
{
    blogContext.RemoveRange(blogContext.Blogs);

    await blogContext.SaveChangesAsync();
}

Étapes suivantes

Dans ce guide de 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.

Autres sujets Entity Framework Core intéressants pour les développeurs Xamarin :