我正在尝试将字符串集合保存到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" });
}
为什么呢?字符串出了什么问题?
答案 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" });
}