Introduzione a EF Core e Xamarin
In questa esercitazione viene creata un'applicazione Xamarin.Forms che esegue l'accesso ai dati su un database SQLite usando Entity Framework Core.
È possibile seguire l'esercitazione usando Visual Studio in Windows o Visual Studio per Mac.
Suggerimento
È possibile visualizzare l'esempio di questo articolo in GitHub.
Prerequisiti
Installare uno dei seguenti elementi:
- Visual Studio 2019 versione 16.3 o successiva con questo carico di lavoro:
- Sviluppo di applicazioni per dispositivi mobili con .NET
- Visual Studio per Mac
Questa documentazione fornisce istruzioni dettagliate sull'installazione per ogni piattaforma.
Scaricare ed eseguire il progetto di esempio
Per eseguire ed esplorare questa applicazione di esempio, scaricare il codice in GitHub.
Dopo il download, aprire il file EFGettingStarted.sln
della soluzione in Visual Studio o Visual Studio per Mac ed eseguire l'applicazione nella piattaforma preferita.
All'avvio dell'app, popola il database SQLite locale con due voci che rappresentano i blog.
Fare clic sul pulsante Aggiungi sulla barra degli strumenti.
Verrà visualizzata una nuova pagina che consente di immettere informazioni su un nuovo blog.
Compilare tutte le informazioni e fare clic su Salva dalla barra degli strumenti. Il nuovo blog verrà salvato nel database SQLite dell'app e verrà visualizzato nell'elenco.
È possibile fare clic su una delle voci di blog nell'elenco e visualizzare eventuali post per tale blog.
Fare clic su Aggiungi sulla barra degli strumenti.
Viene visualizzata quindi una pagina che consente di compilare informazioni su un nuovo post di blog.
Compilare tutte le informazioni e fare clic su Salva sulla barra degli strumenti.
Il nuovo post verrà associato al post di blog su cui si è fatto clic in un passaggio precedente e verrà salvato nel database SQLite dell'app e visualizzato nell'elenco.
Tornare alla pagina dell'elenco di blog. Fare clic su Elimina tutto nella barra degli strumenti. Tutti i blog e i post corrispondenti verranno quindi eliminati dal database SQLite dell'app.
Esplorare il codice
Le sezioni seguenti illustrano il codice nel progetto di esempio che legge, crea, aggiorna ed elimina i dati da un database SQLite usando EF Core con Xamarin.Forms.
Si presuppone che si abbia familiarità con gli argomenti di Xamarin.Forms relativi alla visualizzazione dei dati e all'esplorazione tra le pagine.
Importante
Entity Framework Core usa la reflection per richiamare le funzioni che il linker Xamarin.iOS può rimuovere durante le configurazioni in modalità rilascio . È possibile evitare questo problema in uno dei due modi seguenti.
- Il primo consiste nell'aggiungere
--linkskip System.Core
agli argomenti Mtouch aggiuntivi nelle opzioni di compilazione iOS . - In alternativa, impostare il comportamento del linker Xamarin.iOS su nelle opzioni di compilazione iOS.
Don't Link
Questo articolo illustra altre informazioni sul linker Xamarin.iOS, tra cui come impostare il comportamento in Xamarin.iOS. Questo approccio non è ideale perché può comportare il rifiuto dall'archivio.
Pacchetti NuGet di Entity Framework Core
Per creare app Xamarin.Forms con EF Core, installare il pacchetto per i provider di database EF Core di destinazione in tutti i progetti nella soluzione Xamarin.Forms. Questa esercitazione usa il provider SQLite.
In ogni progetto della soluzione Xamarin.Forms è necessario il pacchetto NuGet seguente.
Microsoft.EntityFrameworkCore.Sqlite
Classi di modello
Ogni tabella nel database SQLite a cui si accede tramite EF Core viene modellata in una classe . In questo esempio vengono usate due classi: Blog
e Post
disponibili nella Models
cartella .
Le classi di modello sono composte solo da proprietà, ovvero le colonne del modello nel database.
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
Posts
proprietà definisce una relazione padre-figlio traBlog
ePost
.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; } } }
Le
BlogId
proprietà eBlog
sono correlate all'oggetto padreBlog
per l'istanza diPost
.
Contesto dei dati
La BloggingContext
classe si trova nella Services
cartella ed eredita dalla classe EF Core DbContext
. Un DbContext
oggetto viene usato per raggruppare query e modifiche del database.
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}");
}
}
}
- Entrambe le proprietà in questa classe di tipo
DbSet
vengono utilizzate per operare sulle tabelle sottostanti che rappresentano Blog e Post. - È
SQLitePCL.Batteries_V2.Init()
necessario nel costruttore per avviare SQLite in iOS. - La
OnConfiguring
funzione configura la posizione del database SQLite nel dispositivo fisico.
Creazione, lettura, aggiornamento ed eliminazione
Di seguito sono riportate alcune istanze dell'app in cui EF Core viene usato per accedere a SQLite.
Lettura
- Restituisce tutti i record.
- La
OnAppearing
funzione diBlogsPage.xaml.cs
restituisce tutti iBlog
record e li archivia in unaList
variabile.
- La
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Restituisce record specifici.
- La
OnAppearing
funzione diPostsPage.xaml.cs
restituiscePost
record che contengono un oggetto specificoBlogId
.
- La
using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Creazione
- Inserire un nuovo record.
- La
Save_Clicked
funzione diAddBlogPage.xaml.cs
inserisce un nuovoBlog
oggetto nel database SQLite.
- La
var blog = new Blog { Url = blogUrl.Text };
using (var blogContext = new BloggingContext())
{
blogContext.Add(blog);
await blogContext.SaveChangesAsync();
}
Update
- Aggiornare un record esistente.
- La
Save_Clicked
funzione diAddPostPage.xaml.cs
aggiorna un oggetto esistenteBlog
con un nuovoPost
oggetto .
- La
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();
}
Elimina
- Eliminare tutti i record con propagazione ai record figlio.
- La
DeleteAll_Clicked
funzione diBlogsPage.xaml.cs
elimina tutti iBlog
record nel database SQLite e propaga le eliminazioni a tutti iBlog
record figlioPost
.
- La
using (var blogContext = new BloggingContext())
{
blogContext.RemoveRange(blogContext.Blogs);
await blogContext.SaveChangesAsync();
}
Passaggi successivi
In questa guida introduttiva si è appreso come usare un'applicazione Xamarin.Forms per accedere a un database SQLite usando Entity Framework Core.
Altri argomenti di Entity Framework Core che interessano gli sviluppatori Xamarin:
- Configurazione di un oggetto
DbContext
- Vedere altre informazioni sulle espressioni di query LINQ
- Configurare il modello per specificare elementi come la lunghezza obbligatoria e massima
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per