[小菜一碟] 我要儲存進 LiteDB 的資料 PrimaryKey 名稱不叫 Id 怎麼辦?

LiteDB 預設會拿我們類別裡面名稱為 Id 的屬性來當作 PrimaryKey,如果我們的類別裡面沒有名稱為 Id 這個屬性會怎樣? 會發生 Exception!這是 LiteDB 預設的一個限制,那如果我們的 PrimaryKey 就不叫 Id 要怎麼辦?我們就來看一下怎麼解決?

假定我有一個 Customer 類別,它的 PrimaryKey 是 No。

解決方法三種

在新增資料時,特別指定 Id 欄位。

LiteDB 的 Insert 方法非常好心地提供了一個多載方法,讓我們可以額外指定 Id 欄位的值。

using (var db = new LiteDatabase(ConnectionString))
{
    var collection = db.GetCollection<Customer>();

    var customer = new Customer
                       {
                           No = Guid.NewGuid(),
                           Name = "Johnny Studio",
                           Phone = "+886912345678",
                           Address = "永和",
                           Birthday = DateTime.Now
                       };

    // 額外指定 Id 值
    collection.Insert(customer.No, customer);
}

但是這只適用於新增單筆資料,那多筆怎麼辦?

標記 [BsonId] Attribute

LiteDB 提供了一個 BsonId 的 Attribute,只要在屬性加上這個標記,該屬性就變成 Id 了。

Fluent Mapping

這個解法適合用在 CRUD 的程式都寫好了,不想動到太多的程式碼的時候,我們利用 BsonMapper 來額外撰寫 Mapping,以本篇文章 Customer 類別為例,在程式 StartUp 的時候加入下面的程式碼。

private static void StartUp()
{
    BsonMapper.Global.Entity<Customer>().Id(x => x.No);
}

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學