LiteDB无法加载BsonRef关联项的问题求助
LiteDB中BsonRef关联项无法加载的问题
我在使用LiteDB时遇到BsonRef项无法加载的问题,以下是最小化LinqPad示例代码:
void Main() { var fn = Path.Join(Path.GetTempPath(), "tmp2.db").Dump("DB"); File.Delete(fn); var db = new LiteDatabase($"Filename={fn}; Connection=shared"); db.BeginTrans(); var col = db.GetCollection<Master>(); col.Insert(new Master() { MasterData = "1", Details = [new() { Rnd1 = 5, Data = "A" }, new() { Rnd1 = 3, Data = "B" } ] }); col.Insert(new Master() { MasterData = "2", Details = [new() { Rnd1 = 1, Data = "M" }, new() { Rnd1 = 2, Data = "N" } ] }); col.Insert(new Master() { MasterData = "3", Details = [new() { Rnd1 = 6, Data = "X" }, new() { Rnd1 = 9, Data = "Y" } ] }); db.Commit(); col .Include(x => x.Details) .FindAll() .Dump(); } public class Master { [BsonId] public ObjectId Id { get; set; } public required string MasterData { get; set; } [BsonRef] public List<Detail> Details { get; set; } } public abstract class DetailBase { public required int Rnd1 { get; set; } } public class Detail : DetailBase { [BsonId] public string Id => $"{Rnd1}+{Rnd2}"; public int Rnd2 { get; set; } = Random.Shared.Next(); public required string Data { get; set; } }
代码参照LiteDB官方文档编写。Dump结果显示Master对象已保存加载,但Details数据未加载,仅显示创建时的随机值;LiteDB Studio中可见引用存在,移除[BsonRef]则集合可正常嵌入。
我已尝试多种方案均无效:
- 在
[BsonRef]中指定集合名称 - 用Fluent配置替代属性
- 有无显式事务不影响结果
- 测试v5稳定版和v6预览版
- 无论是否用Include查询结果一致
- 继承与否无影响
- 尝试过ObjectId、int及复合主键
以下简化版本代码结果仍相同:
void Main() { var fn = Path.Join(Path.GetTempPath(), "tmp2.db").Dump("DB"); File.Delete(fn); var db = new LiteDatabase($"Filename={fn}; Connection=shared"); var col = db.GetCollection<Master>(); col.Insert(new Master() { MasterData = "1", Details = [new() { Id = 1, Data = "A" }, new() { Id = 2, Data = "B" }, new() { Id = 3, Data = "Y" } ] }); col.Insert(new Master() { MasterData = "2", Details = [new() { Id = 4, Data = "M" }, new() { Id = 5, Data = "N" } ] }); col.Insert(new Master() { MasterData = "3", Details = [new() { Id = 6, Data = "X" } ] }); col .Include(x => x.Details) .FindOne(_ => true) .Dump(); col .Query() .Include(x => x.Details) .First() .Dump(); db.Dispose(); var repo = new LiteRepository($"Filename={fn}; Connection=shared"); repo.Query<Master>() .Include(x => x.Details) .First() .Dump(); } public class Master { [BsonId] public ObjectId Id { get; set; } public required string MasterData { get; set; } [BsonRef] public List<Detail> Details { get; set; } } public class Detail { [BsonId] public int Id { get; set; } public required string Data { get; set; } }
此外,数据库中看不到Detail集合,手动创建也无数据存入。请问我遗漏了什么?
内容的提问来源于stack exchange,提问作者ZorgoZ
相关产品推荐
相关产品推荐

