Alıştırma: SQLite'i zaman uyumsuz olarak kullanma

Tamamlandı

Uygulama düzgün çalışır, ancak veritabanı çok sayıda satır içeriyorsa, uygulama veritabanı sorguları ve diğer işlemleri gerçekleştirirken kullanıcı arabirimi yanıt vermemeye başlayabilir. Bu alıştırmada, uygulamayı zaman uyumlu SQLite API'sinden zaman uyumsuz sürüme dönüştüreceksiniz. Bu şekilde, veritabanınızda kaç sorgu yaparsanız yapın uygulamanız her zaman yanıt verir.

Zaman Uyumsuz bağlantı oluşturma

  1. Kişiler projesinde PersonRepository.cs dosyasını açın.

  2. Yöntemin Init tanımını olacak şekilde asyncdeğiştirin. yönteminin dönüş türünü olarak Taskdeğiştirin.

  3. conn özelliğini olarak SQLiteAsyncConnection değiştirin ve bağlantıyı başlatan yöntemdeki Init kodu güncelleştirin.

  4. Zaman uyumlu CreateTable yöntemine yapılan çağrıyı zaman uyumsuz CreateTableAsync yöntemiyle değiştirin.

    Tamamlanmış kod şu şekilde görünmelidir:

    private SQLiteAsyncConnection conn;
    
    private async Task Init()
    {
        if (conn != null)
            return;
    
        conn = new SQLiteAsyncConnection(_dbPath);
    
        await conn.CreateTableAsync<Person>();
    }
    

Tabloya zaman uyumsuz olarak öğe ekleme

  1. yönteminin AddNewPerson tanımını olacak şekilde asyncdeğiştirin. yönteminin dönüş türünü olarak Taskdeğiştirin.

  2. await Artık bir async yöntem olduğundan Init yöntem çağrısına Init anahtar sözcüğünü ekleyin.

  3. AddNewPerson Zaman uyumsuz bir ekleme işlemi kullanarak yeni Person bir ekleme yöntemi güncelleştirin.

    Kod şu şekilde görünmelidir:

    using System.Threading.Tasks;
    ...
    public async Task AddNewPerson(string name)
    {
       int result = 0;
       try
       {
          // Call Init()
          await Init();
    
          // basic validation to ensure a name was entered
          if (string.IsNullOrEmpty(name))
                throw new Exception("Valid name required");
    
          result = await conn.InsertAsync(new Person { Name = name });
    
          StatusMessage = string.Format("{0} record(s) added [Name: {1})", result, name);
       }
       catch (Exception ex)
       {
          StatusMessage = string.Format("Failed to add {0}. Error: {1}", name, ex.Message);
       }
    }
    

Bir tablodaki tüm öğeleri zaman uyumsuz olarak alma

  1. GetAllPeople Yöntem tanımını değiştirin. Bu yöntem olmalı async ve bir Task<List<Person>> nesne döndürmelidir.

  2. await Yöntem çağrısına anahtar sözcüğünü Init ekleyin.

  3. Zaman uyumsuz bir çağrı kullanarak sonuçları döndürmek için yöntemini güncelleştirin.

    Kod şu şekilde görünmelidir:

    public async Task<List<Person>> GetAllPeople()
    {
       try
       {
          await Init();
          return await conn.Table<Person>().ToListAsync();
       }
       catch (Exception ex)
       {
          StatusMessage = string.Format("Failed to retrieve data. {0}", ex.Message);
       }
    
       return new List<Person>();
    }
    
  4. PersonRepository.cs dosyasını kaydedin.

Zaman uyumsuz işlevselliği test edin

  1. Çözüm Gezgini MainPage.xaml dosyasını genişletin ve MainPage.xaml.cs dosyasını açın.

  2. Sınıfından zaman uyumsuz yöntemleri kullanmak için düğme tıklamalı olay işleyicilerinin PersonRepository her ikisini de değiştirin. ve await anahtar sözcüklerini async kullanın:

      public async void OnNewButtonClicked(object sender, EventArgs args)
      {
         statusMessage.Text = "";
    
         await App.PersonRepo.AddNewPerson(newPerson.Text);
         statusMessage.Text = App.PersonRepo.StatusMessage;
      }
    
      public async void OnGetButtonClicked(object sender, EventArgs args)
      {
         statusMessage.Text = "";
    
         List<Person> people = await App.PersonRepo.GetAllPeople();
         peopleList.ItemsSource = people;
      }
    
  3. MainPage.xaml.cs dosyasını kaydedin.

  4. Programı Windows ve Android'de derleyip çalıştırarak daha önce olduğu gibi çalıştığını doğrulayın.