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 :
- Visual Studio 2019 version 16.3 ou ultérieure avec cette charge de travail :
- Développement mobile en .NET
- Visual Studio pour Mac
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.
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.
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.
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.
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.
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 entreBlog
andPost
.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
etBlog
sont associées à l’objetBlog
parent pour l’instance duPost
.
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
deBlogsPage.xaml.cs
retourne tous les enregistrementsBlog
et les stocke dans une variableList
.
- La fonction
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Retourner des enregistrements spécifiques.
- La fonction
OnAppearing
dePostsPage.xaml.cs
retourne des enregistrementsPost
qui contiennent unBlogId
spécifique.
- La fonction
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
deAddBlogPage.xaml.cs
insère un nouvel objetBlog
dans la base de données SQLite.
- La fonction
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
deAddPostPage.xaml.cs
met à jour un objetBlog
existant avec un nouveauPost
.
- La fonction
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
deBlogsPage.xaml.cs
supprime tous les enregistrementsBlog
de la base de données SQLite et supprime en cascade sur l’enfantBlog
tous les enregistrementsPost
.
- La fonction
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 :
- Configuration de
DbContext
- Découvrir les expressions de requête LINQ
- Configurer votre modèle pour spécifier des éléments tels que la longueur requise et la longueur maximale
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour