Začínáme s Entity Framework Core
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.Core
do 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
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; } } }
Vlastnosti
BlogId
aBlog
se vztahují k nadřazenému objektuBlog
pro 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
DbSet
slouží 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
OnConfiguring
nastaví 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
OnAppearing
BlogsPage.xaml.cs
vrátí všechny záznamyBlog
a uloží je do proměnnéList
.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í 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_Clicked
AddBlogPage.xaml.cs
vloží 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_Clicked
zAddPostPage.xaml.cs
aktualizuje existující objektBlog
na 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_Clicked
v rámciBlogsPage.xaml.cs
odstraní všechny záznamyBlog
v databázi SQLite a propaguje odstranění ke všemBlog
podřízenýmPost
zá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.