Sdílet prostřednictvím


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í:

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.

Snímek obrazovky se stránkou seznamu všech blogů

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.

Snímek obrazovky s novou stránkou pro úpravy 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.

Snímek obrazovky se stránkou se seznamem blogových příspěvků

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.

Snímek obrazovky stránky pro přidání nového 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.

snímek obrazovky aplikace se všemi odstraněnými blogy

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ý mezi Blog a Post.

  • 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 a Blog se vztahují k nadřazenému objektu Blog pro instanci Post.

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 OnAppearingBlogsPage.xaml.cs vrátí všechny záznamy Blog a 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.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_ClickedAddBlogPage.xaml.cs vloží do databáze SQLite nový objekt Blog.

      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 z AddPostPage.xaml.cs aktualizuje existující objekt Blog 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ámci BlogsPage.xaml.cs odstraní všechny záznamy Blog v databázi SQLite a propaguje odstranění ke všem Blog podřízeným Post 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.