Wprowadzenie do programu EF Core i platformy Xamarin

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

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

Napiwek

Przykład z tego artykułu można zobaczyć w witrynie GitHub.

Wymagania wstępne

Zainstaluj jedną z poniższych czynności:

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 EFGettingStarted.sln rozwiązania 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.

Screenshot of all blogs list page

Kliknij przycisk Dodaj na pasku narzędzi.

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

Screenshot of new blog edit page

Wypełnij wszystkie informacje i kliknij pozycję 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 w blogu na liście i zobaczyć wpisy dla tego bloga.

Screenshot of blog posts list page

Kliknij pozycję Dodaj na pasku narzędzi.

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

Screenshot of add new post page

Wypełnij wszystkie informacje i kliknij przycisk 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 pozycję Usuń wszystko na pasku narzędzi. Wszystkie blogi i odpowiadające im wpisy zostaną usunięte z bazy danych SQLite aplikacji.

Screenshot of app with all blogs deleted

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 dotyczące wyświetlania danych i nawigowania między stronami.

Ważne

Program Entity Framework Core używa odbicia do wywoływania funkcji, które konsolidator Xamarin.iOS może usuwać podczas konfigurowania trybu wydania . Można tego uniknąć na jeden z dwóch sposobów.

  • Pierwszy polega na dodaniu --linkskip System.Core do dodatkowych argumentów mtouch w opcjach kompilacji systemu iOS.
  • Możesz też ustawić zachowanie konsolidatora Xamarin.iOS na Don't Link wartość w opcjach kompilacji systemu iOS. W tym artykule wyjaśniono więcej na temat konsolidatora platformy 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 jest używany dostawca 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órych uzyskuje dostęp za pośrednictwem programu 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 i 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 BlogPostdla wystąpienia klasy .

Kontekst danych

Klasa BloggingContext znajduje się w folderze Services i dziedziczy z klasy EF Core DbContext . Element A 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.
  • Element SQLitePCL.Batteries_V2.Init() jest wymagany w konstruktorze do zainicjowania sqlite w systemie iOS.
  • Funkcja OnConfiguring konfiguruje lokalizację bazy danych SQLite na urządzeniu fizycznym.

Tworzenie, odczytywanie, aktualizowanie i 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.

Odczyt

  • Zwróć wszystkie rekordy.
    • Funkcja OnAppearing funkcji zwraca wszystkie Blog rekordy i zapisuje je w zmiennej ListBlogsPage.xaml.cs.
using (var blogContext = new BloggingContext())
{
    var theBlogs = blogContext.Blogs.ToList();
}
  • Zwracanie określonych rekordów.
    • Funkcja OnAppearing zwraca Post rekordy PostsPage.xaml.cs zawierające określony BlogIdelement .
using (var blogContext = new BloggingContext())
{
    var postList = blogContext.Posts
        .Where(p => p.BlogId == BlogId)
        .ToList();
}

Utworzenie

  • Wstaw nowy rekord.
    • Funkcja Save_ClickedAddBlogPage.xaml.cs wstawia nowy Blog obiekt do bazy danych SQLite.
var blog = new Blog { Url = blogUrl.Text };

using (var blogContext = new BloggingContext())
{
    blogContext.Add(blog);

    await blogContext.SaveChangesAsync();
}

Zaktualizuj

  • Aktualizowanie istniejącego rekordu.
    • Funkcja Save_Clicked aktualizacji istniejącego AddPostPage.xaml.csBlog obiektu za pomocą nowego Postobiektu .
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();
}

Delete

  • Usuń wszystkie rekordy z kaskadą do rekordów podrzędnych.
    • Funkcja DeleteAll_ClickedBlogsPage.xaml.cs usuwa wszystkie Blog rekordy w bazie danych SQLite i kaskadowo usuwa wszystkie Blog rekordy podrzędne Post .
using (var blogContext = new BloggingContext())
{
    blogContext.RemoveRange(blogContext.Blogs);

    await blogContext.SaveChangesAsync();
}

Następne kroki

W tym rozpoczęciu przedstawiono sposób uzyskiwania dostępu do bazy danych SQLite przy użyciu aplikacji platformy Xamarin.Forms przy użyciu platformy Entity Framework Core.

Inne tematy dotyczące platformy Entity Framework Core dla deweloperów platformy Xamarin: