Mengapa Anda memiliki "Id ObjectId publik" yang sama; di setiap kelas turunan? Ini bukan ide yang bagus. Ini menyembunyikan bidang Id induk.
Untuk mengatasi masalah Anda, Anda perlu "mendaftarkan" kelas turunan Anda (seperti dalam mekanisme serialisasi/deserialisasi). Ada 3 cara untuk melakukannya:
-
Cara deklaratif - hiasi kelas Node dasar dengan:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
Cara umum - ketika tipe diketahui pada waktu kompilasi:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
Cara dinamis - ketika tipe tidak diketahui pada waktu kompilasi:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
Saran lain - gunakan LINQ alih-alih Kueri
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);