2018年5月21日 星期一

在 .NET Core 專案中,第一次體驗 Firebase 資料庫的使用

因為進行 Xamarin 教學課程上的需要,因此,最近特別來研究與體驗如何使用 Firebase 的資料庫功能。

了解更多關於 [.NET Core 3.0 的新功能



首先,建立起一個 .NET Core 主控制台應用專案,讓我們來體驗一下在 C# 中,使用 Firebase 來存取資料庫的應用。
  • 在這個專案中,加入 FirebaseDatabase.net NuGet 套件 FirebaseDatabase.net NuGet Package
  • 接著,我們建立一個資料模型類別,用來宣告要儲存在 Firebase 資料庫內的內容。在這裡,我們宣告一個 MyMoney 類別,用來記錄每筆消費紀錄項目。
public class MyMoney
{
    public Guid Id { get; set; }
    public string Title { get; set; }
    public string InvoiceNo { get; set; }
    public int Cost { get; set; }
}
  • 現在,讓我們開始來使用 Firebase,在這個測試範例程式碼中,我們將會做到:將整個資料表刪除、查詢現在所有的紀錄、刪除指定的紀錄、找出特定的紀錄、修改某筆紀錄、新增10筆紀錄等功能。

完整的測試程式碼

class Program
{
    static async Task Main(string[] args)
    {
        var client = new Firebase.Database.FirebaseClient("https://xamarindb-3408d.firebaseio.com");
        var child = client.Child("MyMoneys");

        Console.WriteLine("刪除掉所有的資料");
        await child.DeleteAsync();

        Console.WriteLine("產生 10 筆購物紀錄");
        for (int i = 1; i < 10; i++)
        {
            await child.PostAsync<MyMoney>(new MyMoney()
            {
                Id = Guid.NewGuid(),
                Title = $"冷泡茶 {i} 瓶",
                InvoiceNo = $"0000 {i}",
                Cost = 20 * i,
            });
        }

        Console.WriteLine("列出 Firebase 中所有的紀錄");
        var fooPosts = await child.OnceAsync<MyMoney>();
        foreach (var item in fooPosts)
        {
            Console.WriteLine($"購買商品:{item.Object.Title} 價格:{item.Object.Cost}");
        }

        Console.WriteLine("查詢購物價格小於 90 的紀錄");
        var fooRec = fooPosts.Where(x => x.Object.Cost <= 90);
        foreach (var item in fooRec)
        {
            Console.WriteLine($"購買商品:{item.Object.Title} 價格:{item.Object.Cost}");
        }

        Console.WriteLine("刪除購物價格小於 90 的紀錄");
        var fooRecDeleted = fooPosts.Where(x => x.Object.Cost <= 90);
        foreach (var item in fooRecDeleted)
        {
            await child.Child(item.Key).DeleteAsync();
            Console.WriteLine($"購買商品:{item.Object.Title} 價格:{item.Object.Cost} 已經被刪除");
        }


        Console.WriteLine("列出 Firebase 中所有的紀錄");
        fooPosts = await child.OnceAsync<MyMoney>();
        foreach (var item in fooPosts)
        {
            Console.WriteLine($"購買商品:{item.Object.Title} 價格:{item.Object.Cost}");
        }

        Console.WriteLine("查詢購物價格等於 140 的紀錄");
        var foo140Rec = fooPosts.FirstOrDefault(x => x.Object.Cost == 140);
        foo140Rec.Object.Cost = 666;
        await child.Child(foo140Rec.Key).PutAsync(foo140Rec.Object);
        Console.WriteLine($"購買商品:{foo140Rec.Object.Title} 的價格已經修正為 價格:{foo140Rec.Object.Cost}");

        Console.WriteLine("列出 Firebase 中所有的紀錄");
        fooPosts = await child.OnceAsync<MyMoney>();
        foreach (var item in fooPosts)
        {
            Console.WriteLine($"購買商品:{item.Object.Title} 價格:{item.Object.Cost}");
        }

        Console.WriteLine("Press any key for continuing...");
        Console.ReadKey();

    }
}

執行結果


執行這個測試程式,其輸出結果如下所示:
刪除掉所有的資料
產生 10 筆購物紀錄
列出 Firebase 中所有的紀錄
購買商品:冷泡茶 1 瓶 價格:20
購買商品:冷泡茶 2 瓶 價格:40
購買商品:冷泡茶 3 瓶 價格:60
購買商品:冷泡茶 4 瓶 價格:80
購買商品:冷泡茶 5 瓶 價格:100
購買商品:冷泡茶 6 瓶 價格:120
購買商品:冷泡茶 7 瓶 價格:140
購買商品:冷泡茶 8 瓶 價格:160
購買商品:冷泡茶 9 瓶 價格:180
查詢購物價格小於 90 的紀錄
購買商品:冷泡茶 1 瓶 價格:20
購買商品:冷泡茶 2 瓶 價格:40
購買商品:冷泡茶 3 瓶 價格:60
購買商品:冷泡茶 4 瓶 價格:80
刪除購物價格小於 90 的紀錄
購買商品:冷泡茶 1 瓶 價格:20 已經被刪除
購買商品:冷泡茶 2 瓶 價格:40 已經被刪除
購買商品:冷泡茶 3 瓶 價格:60 已經被刪除
購買商品:冷泡茶 4 瓶 價格:80 已經被刪除
列出 Firebase 中所有的紀錄
購買商品:冷泡茶 5 瓶 價格:100
購買商品:冷泡茶 6 瓶 價格:120
購買商品:冷泡茶 7 瓶 價格:140
購買商品:冷泡茶 8 瓶 價格:160
購買商品:冷泡茶 9 瓶 價格:180
查詢購物價格等於 140 的紀錄
購買商品:冷泡茶 7 瓶 的價格已經修正為 價格:666
列出 Firebase 中所有的紀錄
購買商品:冷泡茶 5 瓶 價格:100
購買商品:冷泡茶 6 瓶 價格:120
購買商品:冷泡茶 7 瓶 價格:666
購買商品:冷泡茶 8 瓶 價格:160
購買商品:冷泡茶 9 瓶 價格:180
Press any key for continuing...

了解更多關於 [.NET Core 3.0 的新功能