लघु संस्करण:हाँ, हर जगह स्ट्रिंग का उपयोग करें।
यदि आप एनोटेशन के साथ ठीक हैं, तो इसका उपयोग करें:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
अन्यथा आप कक्षा मानचित्र का उपयोग कर सकते हैं:
BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance));
}
);
लंबा संस्करण:
यह सलाह दी जाती है कि कुछ अपारदर्शी का उपयोग करें, जो आपके मॉडल और सेवा परत में जितना संभव हो सके (जब संभव हो) अंतर्निहित डेटाबेस कार्यान्वयन से सीधे जुड़ा नहीं है।
पहले, प्राथमिक कुंजी आईडी जहां आमतौर पर बड़ी संख्याएं होती थीं, जिन्हें तब डेटाबेस पर प्राथमिक कुंजी कॉलम में मैप किया जाता था। हालांकि, जब एक नई इकाई को एक नई आईडी निर्दिष्ट करते हैं, तो एक अद्वितीय आईडी सुनिश्चित करने के लिए डेटाबेस पर एक जांच की जानी चाहिए। LO-HI आईडी जेनरेटर से लेकर auto_increment कॉलम तक, सीक्वेंस आदि तक कई तकनीक मौजूद हैं।
नोएसक्यूएल के साथ, और अधिक समानता की आवश्यकता के साथ, अधिकांश एप्लिकेशन अब यूयूआईडी या इसकी विविधताओं का उपयोग कर रहे हैं, क्योंकि आईडी को उचित संभावनाओं के साथ उत्पन्न किया जा सकता है, यह डेटाबेस से पूछे बिना अद्वितीय होगा कि क्या यह वास्तव में अद्वितीय है, या अनुक्रमों का उपयोग करता है या जैसे, जो क्षैतिज रूप से स्केल करने वाले एप्लिकेशन में अड़चनें हैं।
MongoDB कोई अंतर नहीं है, और ObjectId का उपयोग करता है जो एक प्रकार के UUIDs हैं।
इन आईडी (दोनों मोंगो और अन्य) को हमेशा स्ट्रिंग्स के रूप में दर्शाया जा सकता है, आमतौर पर कुंजी को लिखने वाले बाइट्स का एक हेक्स प्रतिनिधित्व। तो, अपने मॉडल में स्ट्रिंग को आईडी के रूप में उपयोग करें, आपकी सेवा परत में वही, आप डेटा परत में इसे अपने अंतर्निहित डेटाबेस कार्यान्वयन के लिए बेहतर प्रारूप में परिवर्तित करें, इस मामले में मोंगोडीबी।