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 :
-
Visual Studio 2019 version 16.3 ou ultérieure avec cette charge de travail :
- Développement Mobile avec .NET
- Visual Studio pour Mac
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
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
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
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
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
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 entreBlog
etPost
.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 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
deBlogsPage.xaml.cs
retourne tous les enregistrementsBlog
et les stocke dans une variableList
.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Retourne des enregistrements spécifiques.
La fonction
OnAppearing
dePostsPage.xaml.cs
renvoiePost
enregistrements contenant unBlogId
spé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
deAddBlogPage.xaml.cs
insère un nouvel objetBlog
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
deAddPostPage.xaml.cs
met à jour un objetBlog
existant avec une nouvellePost
.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
deBlogsPage.xaml.cs
supprime tous les enregistrementsBlog
dans la base de données SQLite et applique les suppressions à tous les enregistrements enfantsBlog
Post
.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.