MongoDB के लिए आवश्यक है कि डेटाबेस में संग्रहीत प्रत्येक दस्तावेज़ में "_id" नामक एक फ़ील्ड (रूट स्तर पर) हो।
C# ड्राइवर मानता है कि आपकी कक्षा में "Id", "id" या "_id" नामक किसी भी क्षेत्र को विशेष "_id" फ़ील्ड में मैप किया जाना है। यह एक सम्मेलन है, जिसे ओवरराइड किया जा सकता है। C# ड्राइवर को यह नहीं पता है कि आपका परिणाम वर्ग संग्रह के मूल दस्तावेज़ के रूप में उपयोग करने के लिए नहीं है, इसलिए यह आपका "id" फ़ील्ड ढूंढता है और इसे डेटाबेस में "_id" पर मैप करता है।
इसे ओवरराइड करने का एक तरीका यह है कि आप अपनी कक्षा में फ़ील्ड का नाम बदलें (जैसा कि आपने खोजा था)। फिर आप क्या कर सकते हैं [BsonElement] विशेषता का उपयोग अपने C# फ़ील्ड नाम (जैसे "idd") को डेटाबेस में वास्तव में उपयोग किए जा रहे किसी भी नाम (जैसे "id") में मैप करने के लिए करें। उदाहरण के लिए:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
एक अन्य विकल्प उस सम्मेलन को ओवरराइड करना है जो आपके परिणाम वर्ग के लिए सी # ड्राइवर के डिफ़ॉल्ट व्यवहार को दबाने के लिए कक्षा के "आईडी" सदस्य को ढूंढता है। आप अपने परिणाम वर्ग के लिए एक नया कन्वेंशन प्रोफाइल पंजीकृत करके ऐसा कर सकते हैं। उदाहरण के लिए:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
इससे पहले कि आपका परिणाम वर्ग मैप किया जाए, आपको अपने कार्यक्रम में इसे बहुत पहले ही सुनिश्चित कर लेना चाहिए।