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

时间:2017-10-11 21:05:37

标签: c# nosql litedb

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

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

它抛出“对象引用未设置为对象的实例”。在Insert。上的LiteDB.BsonMapper.ToDocument [T](T实体)。

这样的代码有效:

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

为什么呢?字符串出了什么问题?

1 个答案:

答案 0 :(得分:2)

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

文档结构是必需的,因为每个文档都必须包含唯一的_id值字段。如果您不提供(如您的示例中所示),LiteDB将使用ObjectId自动创建此Id字段。

如果您想避免创建此类,可以使用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" });
}