Udostępnij za pośrednictwem


Wprowadzenie do platformy Entity Framework Core

W tym samouczku utworzysz aplikację Xamarin.Forms, która uzyskuje dostęp do danych z bazy danych SQLite przy użyciu Entity Framework Core.

Możesz skorzystać z samouczka przy użyciu programu Visual Studio w systemie Windows lub Visual Studio dla komputerów Mac.

Warunki wstępne

Zainstaluj jedną z poniższych opcji:

Ta dokumentacja zawiera szczegółowe instrukcje instalacji krok po kroku dla każdej platformy.

Pobieranie i uruchamianie przykładowego projektu

Aby uruchomić i eksplorować tę przykładową aplikację, pobierz kod w witrynie GitHub.

Po pobraniu otwórz plik rozwiązania EFGettingStarted.sln w programie Visual Studio lub Visual Studio dla komputerów Mac i uruchom aplikację na wybranej platformie.

Po pierwszym uruchomieniu aplikacji zostanie wypełniona lokalna baza danych SQLite z dwoma wpisami reprezentującymi blogi.

Zrzut ekranu przedstawiający stronę listy wszystkich blogów

Kliknij przycisk Dodaj na pasku narzędzi.

Zostanie wyświetlona nowa strona, która umożliwia wprowadzenie informacji o nowym blogu.

Zrzut ekranu nowej strony edycji bloga

Wypełnij wszystkie dane i kliknij Zapisz na pasku narzędzi. Nowy blog zostanie zapisany w bazie danych SQLite aplikacji i zostanie wyświetlony na liście.

Możesz kliknąć jeden z wpisów bloga na liście i zobaczyć wszystkie wpisy dla tego bloga.

Zrzut ekranu przedstawiający stronę listy wpisów w blogu

Kliknij Dodaj na pasku narzędzi.

Zostanie wyświetlona strona umożliwiająca wypełnienie informacji o nowym wpisie w blogu.

Zrzut ekranu strony dodawania nowego wpisu

Wypełnij wszystkie informacje i kliknij Zapisz na pasku narzędzi.

Nowy wpis zostanie skojarzony z wpisem w blogu klikniętym w poprzednim kroku i zapisze go w bazie danych SQLite aplikacji i zostanie wyświetlony na liście.

Wróć do strony listy blogów. Kliknij polecenie Usuń wszystkie na pasku narzędzi. Wszystkie blogi i odpowiadające im wpisy zostaną usunięte z bazy danych SQLite aplikacji.

Zrzut ekranu przedstawiający aplikację ze wszystkimi blogami usuniętymi

Eksplorowanie kodu

W poniższych sekcjach przedstawiono kod w przykładowym projekcie, który odczytuje, tworzy, aktualizuje i usuwa dane z bazy danych SQLite przy użyciu programu EF Core z platformą Xamarin.Forms.

Zakłada się, że znasz tematy platformy Xamarin.Forms wyświetlania danych i nawigowania między stronami.

Ważny

Program Entity Framework Core używa refleksji do wywoływania funkcji, które linker Xamarin.iOS może usunąć w konfiguracjach trybu wydania. Można tego uniknąć na jeden z dwóch sposobów.

  • Pierwszym z nich jest dodanie --linkskip System.Core do dodatkowych argumentów mtouch w opcjach kompilacji systemu iOS.
  • Alternatywnie ustaw zachowanie konsolidatora Xamarin.iOS na Don't Link w opcjach kompilacji systemu iOS. W tym artykule wyjaśniono więcej na temat konsolidatora Xamarin.iOS, w tym sposobu ustawiania zachowania na platformie Xamarin.iOS. (Takie podejście nie jest idealne, ponieważ może to spowodować odrzucenie ze sklepu).

Pakiety NuGet programu Entity Framework Core

Aby utworzyć aplikacje platformy Xamarin.Forms za pomocą programu EF Core, należy zainstalować pakiet dla dostawców baz danych platformy EF Core, które mają być przeznaczone dla wszystkich projektów w rozwiązaniu Xamarin.Forms. W tym samouczku wykorzystano dostawcę SQLite.

Poniższy pakiet NuGet jest wymagany w każdym z projektów w rozwiązaniu Xamarin.Forms.

  • Microsoft.EntityFrameworkCore.Sqlite

Klasy modelu

Każda tabela w bazie danych SQLite, do której uzyskuje się dostęp za pomocą EF Core, jest modelowana w klasie. W tym przykładzie są używane dwie klasy: Blog i Post, które można znaleźć w folderze Models.

Klasy modelu składają się tylko z właściwości, które modelują kolumny w bazie danych.

  • 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>();
        }
    }
    
  • Właściwość Posts definiuje relację nadrzędny-podrzędny między 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; }
        }
    }
    
  • Właściwości BlogId i Blog odnoszą się z powrotem do obiektu nadrzędnego Blog dla instancji Post.

Kontekst danych

Klasa BloggingContext znajduje się w folderze Services i dziedziczy z klasy DbContext platformy EF Core. DbContext służy do grupowania zapytań i zmian bazy danych.

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}");
        }
    }
}
  • Obie właściwości w tej klasie typu DbSet są używane do obsługi bazowych tabel reprezentujących blogi i wpisy.
  • SQLitePCL.Batteries_V2.Init() jest potrzebny w konstruktorze do zainicjowania SQLite w systemie iOS.
  • Funkcja OnConfiguring konfiguruje lokalizację bazy danych SQLite na urządzeniu fizycznym.

Tworzenie, odczytywanie, aktualizowanie & usuwanie

Poniżej przedstawiono niektóre wystąpienia w aplikacji, w których program EF Core jest używany do uzyskiwania dostępu do biblioteki SQLite.

Czytaj

  • Zwróć wszystkie rekordy.

    • Funkcja OnAppearingBlogsPage.xaml.cs zwraca wszystkie rekordy Blog i zapisuje je w zmiennej List.

      using (var blogContext = new BloggingContext())
      {
          var theBlogs = blogContext.Blogs.ToList();
      }
      
  • Zwrot określonych rekordów.

    • Funkcja OnAppearingPostsPage.xaml.cs zwraca rekordy Post zawierające określone BlogId.

      using (var blogContext = new BloggingContext())
      {
          var postList = blogContext.Posts
              .Where(p => p.BlogId == BlogId)
              .ToList();
      }
      

Utwórz

  • Wstaw nowy rekord.
    • Funkcja Save_ClickedAddBlogPage.xaml.cs wstawia nowy obiekt Blog do bazy danych SQLite.

      var blog = new Blog { Url = blogUrl.Text };
      
      using (var blogContext = new BloggingContext())
      {
          blogContext.Add(blog);
      
          await blogContext.SaveChangesAsync();
      }
      

Aktualizacja

  • Aktualizowanie istniejącego rekordu.
    • Funkcja Save_Clicked z AddPostPage.xaml.cs aktualizuje istniejący obiekt Blog, używając nowego 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();
      }
      

Usunąć

  • Usuń wszystkie rekordy z kaskadą do rekordów podrzędnych.
    • Funkcja DeleteAll_Clicked z BlogsPage.xaml.cs usuwa wszystkie rekordy Blog w bazie danych SQLite i kaskadowo usuwa wszystkie rekordy Blog podrzędne Post.

      using (var blogContext = new BloggingContext())
      {
          blogContext.RemoveRange(blogContext.Blogs);
      
          await blogContext.SaveChangesAsync();
      }
      

Następne kroki

W tej instrukcji dowiedzieliście się, jak używać aplikacji Xamarin.Forms do uzyskiwania dostępu do bazy danych SQLite za pomocą Entity Framework Core.