आपके पास समान "सार्वजनिक ऑब्जेक्ट आईडी आईडी" क्यों है? प्रत्येक व्युत्पन्न वर्ग में?यह वास्तव में अच्छा विचार नहीं है। यह पैरेंट आईडी फ़ील्ड को छुपाता है।
अपनी समस्या को हल करने के लिए आपको अपनी व्युत्पन्न कक्षाओं को "पंजीकृत" करने की आवश्यकता है (जैसे किसी क्रमबद्धता/deserialization तंत्र में)। इसे करने के 3 तरीके हैं:
-
घोषणात्मक तरीका - बेस नोड क्लास को इससे सजाएं:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
सामान्य तरीका - जब संकलन समय पर प्रकार ज्ञात हों:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
गतिशील तरीका - जब संकलन समय पर प्रकार अज्ञात हों:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
एक और सुझाव - क्वेरी के बजाय LINQ का उपयोग करें
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);