1

我正在尝试将字符串集合保存到 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 entity) 上插入。

像这样的代码有效:

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

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

4

1 回答 1

3

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

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

如果你想避免创建这个类,你可以使用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" });
}
于 2017-10-12T12:49:05.737 回答