无法将字符串集合保存到 LiteDb

Impossible to save collection of strings to LiteDb

我正在尝试将字符串集合保存到 LiteDb

using (var db = new LiteDatabase(@"MyData.db"))
{
    var col = db.GetCollection<string>("Writers");
    col.Insert("Mark Twain");
    col.Insert("Jack London");
 }

它在 LiteDB.BsonMapper.ToDocument[T](T 实体)插入时抛出 "Object reference not set to an instance of an object."。

这样的代码有效:

public class Writer
{
    public string Name { get; set; }
}

using (var db = new LiteDatabase(@"MyData.db"))
{
    var col = db.GetCollection<Writer>("Writers");
    col.Insert(new Writer { Name = "Mark Twain" });
    col.Insert(new Writer { Name = "Jack London" });
}

为什么?字符串有什么问题?

LiteDB 是一个"Document Store" 数据库,因此您只能存储文档。您不能在集合中存储任何原始数据类型或数组。

需要文档结构,因为每个文档都必须包含一个唯一的 _id 值字段。如果您不提供(如您的示例),LiteDB 将使用 ObjectId.

自动创建此 Id 字段

如果你想避免创建这个class,你可以使用BsonDocument更简单易用。

using (var db = new LiteDatabase(@"MyData.db"))
{
    var col = db.GetCollection("Writers");
    col.Insert(new BsonDocument { ["Name"] = "Mark Twain" });
    col.Insert(new BsonDocument { ["Name"] = "Jack London" });
}