Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu vytvoříte Xamarin.Forms aplikaci, 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 sadě Visual Studio pro Mac.
Spropitné
Ukázku tohoto článku najdete naGitHubu .
Požadavky
Nainstalujte jednu z následujících možností:
-
Verze 16.3 nebo novější Visual Studio 2019 s touto pracovní zátěží:
- vývoj pro mobilních zařízení s využitím .NET
- Visual Studio for Mac
Tato dokumentace obsahuje podrobné pokyny k instalaci pro každou platformu.
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 řešení EFGettingStarted.sln 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.
Na panelu nástrojů klikněte na tlačítko Přidat.
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šechny. 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 znáte témata Xamarin.Forms zobrazení dat a navigaci mezi stránkami.
Důležitý
Entity Framework Core používá reflexi k vyvolání funkcí, které linker Xamarin.iOS může během konfigurace release režimu vypustit. Tomu se můžete vyhnout jedním ze dvou způsobů.
- První možností je přidat
--linkskip System.Coredo Další argumenty mtouch v možnostech sestavení iOS . - V možnostech buildu iOS můžete také nastavit chování linkeru Xamarin.iOS na
Don't Link. Tento článek vysvětluje další informace o linkeru Xamarin.iOS včetně nastavení chování v Xamarin.iOS. (Tento přístup není ideální, protože může vést k odmítnutí z obchodu).
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 složce Models.
Třídy modelu se skládají pouze z vlastností, které modelují sloupce 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
Postsdefinuje vztah nadřazený-podřízený meziBlogaPost.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; } } }Vlastnosti
BlogIdaBlogse vztahují k nadřazenému objektuBlogpro instanciPost.
Kontext údajů
Třída BloggingContext je umístěna ve složce Services a dědí z EF Core DbContext třídy.
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
DbSetslouží k práci s podkladovými tabulkami představujícími blogy a příspěvky. - V konstruktoru je potřeba
SQLitePCL.Batteries_V2.Init()k zahájení SQLite v iOSu. - Funkce
OnConfiguringnastaví umístění databáze SQLite na fyzickém zařízení.
Vytvořte, čtěte, aktualizujte & odstraňte
Následuje několik instancí v aplikaci, kde se ef Core používá pro přístup k SQLite.
Číst
Vrátí všechny záznamy.
Funkce
OnAppearingBlogsPage.xaml.csvrátí všechny záznamyBloga uloží je do proměnnéList.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Vrátí konkrétní záznamy.
Funkce
OnAppearingPostsPage.xaml.csvrátíPostzáznamy, které obsahují konkrétníBlogId.using (var blogContext = new BloggingContext()) { var postList = blogContext.Posts .Where(p => p.BlogId == BlogId) .ToList(); }
Vytvářet
- Vložení nového záznamu
Funkce
Save_ClickedAddBlogPage.xaml.csvloží do databáze SQLite nový objektBlog.var blog = new Blog { Url = blogUrl.Text }; using (var blogContext = new BloggingContext()) { blogContext.Add(blog); await blogContext.SaveChangesAsync(); }
Aktualizace
- Aktualizujte existující záznam.
Funkce
Save_ClickedzAddPostPage.xaml.csaktualizuje existující objektBlogna nový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(); }
Vymazat
- Odstraňte všechny záznamy s kaskádovým odstraněním na podřízené záznamy.
Funkce
DeleteAll_Clickedv rámciBlogsPage.xaml.csodstraní všechny záznamyBlogv databázi SQLite a propaguje odstranění ke všemBlogpodřízenýmPostzáznamům.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.