无法将字符串集合保存到 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" });
}
我正在尝试将字符串集合保存到 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
.
如果你想避免创建这个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" });
}