Tại sao bạn có cùng một "Id ObjectId công khai;" trong mỗi lớp dẫn xuất? Nó không thực sự là một ý kiến hay. Nó ẩn trường Id gốc.
Để giải quyết vấn đề của bạn, bạn cần "đăng ký" các lớp dẫn xuất của mình (giống như trong bất kỳ cơ chế tuần tự hóa / giải mã hóa nào). Có 3 cách để thực hiện:
-
Cách khai báo - trang trí lớp Node cơ sở với:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
Cách chung - khi các loại được biết tại thời điểm biên dịch:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
Cách động - khi các loại không xác định tại thời điểm biên dịch:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
Một đề xuất khác - sử dụng LINQ thay vì Truy vấn
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);