लंबी कहानी छोटी:यह सब सम्मेलनों के बारे में है। MongoDB .NET ड्राइवर स्थिर वर्ग ConventionRegistry
. को उजागर करता है जो आपको अपने स्वयं के सम्मेलनों को पंजीकृत करने की अनुमति देता है (अधिक यहाँ
) इसके अतिरिक्त दो "अंतर्निहित" परंपराएं हैं __defaults__
और __attributes__
. गहरी खुदाई (ड्राइवर जीथब
) आप पा सकते हैं कि यह एक काफी दिलचस्प सम्मेलन दर्ज करता है:
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
जिसका मतलब है कि id
सदस्यों को नियमित BSON _id तत्व माना जाएगा।
इसे कैसे ठीक करें?
आप डिफ़ॉल्ट परंपराओं से छुटकारा पा सकते हैं
ConventionRegistry.Remove("__defaults__");
हालाँकि स्वचालित रूप से आप अन्य सभी ड्राइवर सम्मेलनों को छोड़ देंगे जो कि बहुत जोखिम भरा है। वैकल्पिक रूप से आप एक नकली संपत्ति बना सकते हैं जो हमेशा खाली रहेगी:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
या आप बस BsonNoId
. का उपयोग कर सकते हैं विशेषता जो
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
तो सम्मेलन आपकी id
setting सेट कर रहा होगा क्लास मैप में IdMember के रूप में लेकिन फिर पोस्टप्रोसेसिंग के दौरान यह विशेषता IdMember को शून्य होने के लिए मजबूर कर देगी और आपकी क्लास सफलतापूर्वक deserialized हो जाएगी