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);
}