Začínáme s EF Core a Xamarinem
V tomto kurzu vytvoříte aplikaci Xamarin.Forms , která provádí přístup k datům v databázi SQLite pomocí Entity Framework Core.
Kurz můžete sledovat pomocí sady Visual Studio ve Windows nebo Visual Studio pro Mac.
Tip
Ukázku pro tento článek najdete na GitHubu.
Požadavky
Nainstalujte jednu z následujících možností:
- Visual Studio 2019 verze 16.3 nebo novější s touto úlohou:
- Vývoj mobilních aplikací s využitím .NET
- Visual Studio pro Mac
Tato dokumentace obsahuje podrobné pokyny k instalaci jednotlivých platforem.
Stažení a spuštění ukázkového projektu
Pokud chcete tuto ukázkovou aplikaci spustit a prozkoumat, stáhněte si kód na GitHubu.
Po stažení otevřete soubor EFGettingStarted.sln
řešení v sadě Visual Studio nebo Visual Studio pro Mac a spusťte aplikaci na libovolné platformě.
Při prvním spuštění aplikace se naplní místní databáze SQLite dvěma položkami představujícími blogy.
Klikněte na tlačítko Přidat na panelu nástrojů.
Zobrazí se nová stránka, která umožňuje zadat informace o novém blogu.
Vyplňte všechny informace a klikněte na Uložit z panelu nástrojů. Nový blog se uloží do databáze SQLite aplikace a zobrazí se v seznamu.
Můžete kliknout na jeden z položek blogu v seznamu a zobrazit všechny příspěvky pro tento blog.
Na panelu nástrojů klikněte na Přidat .
Zobrazí se stránka, která vám umožní vyplnit informace o novém blogovém příspěvku.
Vyplňte všechny informace a klikněte na Uložit na panelu nástrojů.
Nový příspěvek bude přidružený k blogovém příspěvku, na který jste klikli v předchozím kroku, a uloží se do databáze SQLite aplikace a zobrazí se v seznamu.
Vraťte se na stránku se seznamem blogů. A na panelu nástrojů klikněte na Odstranit vše . Všechny blogy a jejich odpovídající příspěvky se pak odstraní z databáze SQLite aplikace.
Prozkoumání kódu
Následující části vás provedou kódem v ukázkovém projektu, který čte, vytváří, aktualizuje a odstraňuje data z databáze SQLite pomocí EF Core s Xamarin.Forms.
Předpokládá se, že jste obeznámeni s tématy Xamarin.Forms zobrazení dat a procházením mezi stránkami.
Důležité
Entity Framework Core používá reflexi k vyvolání funkcí, které může linker Xamarin.iOS v konfiguracích režimu vydání vypustit. Tomu se můžete vyhnout jedním ze dvou způsobů.
- Prvním je přidat
--linkskip System.Core
do argumentů Další mtouch v možnostech sestavení iOS. - Případně můžete v možnostech sestavení iOS nastavit chování
Don't Link
linkeru Xamarin.iOS. Tento článek vysvětluje další informace o linkeru Xamarin.iOS, včetně toho, jak nastavit chování v Xamarin.iOS. (Tento přístup není ideální, protože může vést k odmítnutí ze storu).
Balíčky NuGet Entity Framework Core
Pokud chcete vytvářet aplikace Xamarin.Forms pomocí EF Core, nainstalujte balíček pro poskytovatele databází EF Core, na které chcete cílit, do všech projektů v řešení Xamarin.Forms. Tento kurz používá zprostředkovatele SQLite.
V každém z projektů v řešení Xamarin.Forms je potřeba následující balíček NuGet.
Microsoft.EntityFrameworkCore.Sqlite
Třídy modelů
Každá tabulka v databázi SQLite, ke které se přistupuje prostřednictvím EF Core, je modelována ve třídě. V této ukázce se používají dvě třídy: Blog
a Post
které lze najít ve Models
složce.
Třídy modelu se skládají pouze z vlastností, které sloupce modelu v databázi.
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>(); } }
Vlastnost
Posts
definuje vztah nadřazený-podřízený meziBlog
aPost
.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; } } }
Blog
VlastnostiBlogId
se vztahují zpět k nadřazenéhoBlog
objektu pro instanci objektuPost
.
Kontext dat
Třída BloggingContext
se nachází ve Services
složce a dědí z třídy EF Core DbContext
. A DbContext
slouží k seskupení databázových dotazů a změn.
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}");
}
}
}
- Obě vlastnosti v této třídě typu
DbSet
slouží k práci s podkladovými tabulkami představujícími blogy a příspěvky. - V
SQLitePCL.Batteries_V2.Init()
konstruktoru je potřeba k inicializaci SQLite v iOSu. - Funkce
OnConfiguring
nastaví umístění databáze SQLite na fyzickém zařízení.
Vytvoření, čtení, aktualizace a odstranění
Následuje několik instancí v aplikaci, kde se ef Core používá pro přístup k SQLite.
Přečíst
- Vrátí všechny záznamy.
- Funkce
OnAppearing
BlogsPage.xaml.cs
vrátí všechnyBlog
záznamy a uloží je doList
proměnné.
- Funkce
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Vrátí konkrétní záznamy.
- Funkce
OnAppearing
PostsPage.xaml.cs
vrátíPost
záznamy, které obsahují určitýBlogId
.
- Funkce
using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Vytvoření
- Vložení nového záznamu
- Funkce
Save_Clicked
AddBlogPage.xaml.cs
vloží novýBlog
objekt do databáze SQLite.
- Funkce
var blog = new Blog { Url = blogUrl.Text };
using (var blogContext = new BloggingContext())
{
blogContext.Add(blog);
await blogContext.SaveChangesAsync();
}
Aktualizovat
- Aktualizujte existující záznam.
- Funkce
Save_Clicked
aktualizace existujícíhoAddPostPage.xaml.cs
Blog
objektu novýmPost
.
- Funkce
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();
}
Odstranění
- Odstraňte všechny záznamy s kaskádovou na podřízené záznamy.
- Funkce
DeleteAll_Clicked
BlogsPage.xaml.cs
odstraní všechnyBlog
záznamy v databázi SQLite a kaskádově odstraní všechnyBlog
podřízenéPost
záznamy.
- Funkce
using (var blogContext = new BloggingContext())
{
blogContext.RemoveRange(blogContext.Blogs);
await blogContext.SaveChangesAsync();
}
Další kroky
V tomto úvodním článku jste zjistili, jak pomocí aplikace Xamarin.Forms přistupovat k databázi SQLite pomocí Entity Framework Core.
Další témata entity Framework Core, která jsou pro vývojáře Xamarinu zajímavá:
- Konfigurace
DbContext
- Další informace o výrazech dotazů LINQ
- Nakonfigurujte model tak, aby určil věci, jako je povinné a maximální délka.