C# ile MongoDB BSON Eşlemesi: Açık Adlar, Record ve ID Tipleri
Bu yazı MongoDB C# sürücüsünün nesneleri BSON belgelerine nasıl eşlediğini anlatıyor. Açık element adları, immutable record'lar için creator eşlemesi, _id için BSON tipi seçimi ve fazla alanların yönetimi ele alınıyor. Yazara göre uyumluluk, yalnızca yeni bir nesnenin gidiş-dönüşüyle değil, saklı belgelerle test edilmelidir.
Kilit noktalar
- SetElementName ile saklanan alan adlarını sabitleyin; C# property adını değiştirmek kalıcı sözleşmede değişikliktir.
- Immutable record'lar için MapCreator tanımlayın ki sürücü deserialization sırasında nesneyi nasıl oluşturacağını bilsin.
- _id temsilini açıkça belirleyin, örneğin StringSerializer(BsonType.ObjectId), ve sorguların aynı tipi kullandığından emin olun.
- Class map'leri ilk serileştirme veya bağlantıdan önce, uygulama başlangıcında bir kez kaydedin.
- SetIgnoreExtraElements(true) yalnızca okuma tarafındaki görünümlerde kullanın; yeniden yazmada bilinmeyen alanları korumaz.
- Her desteklenen sürüm için BSON fixture'ları ile test edin, eksik isteğe bağlı alanları da dahil edin.
MongoDB'nin C# sürücüsü, nesne üyelerini BSON class map'leri aracılığıyla belge alanlarına eşler; bu eşleme fiilen kalıcı bir sözleşmedir. Bir property'nin adını değiştirmek ya da ID tipini değiştirmek, mevcut belgelerin okunmasını bozabilir ve derleyici bunu yakalayamaz. Yazı bu sözleşmeyi açık hale getirmeyi anlatıyor: SetElementName saklanan alan adını sabitler, MapCreator immutable bir record'a deserialization yolu verir, açık bir serializer ise string ID'nin nasıl kaydedileceğini belirler.
Yazar ayrıca class map'lerin başlangıçta kaydedilmesini ve bilinmeyen alanları yok sayan toleranslı okuyucular için SetIgnoreExtraElements seçeneğini ele alıyor. Yeni oluşturulmuş bir nesnenin gidiş-dönüşü, eski belgeler hakkında çok az şey kanıtlar; bu yüzden eksik isteğe bağlı alanları ve gerçek saklanan _id tipini içeren temsili BSON fixture'ları ile test etmek gerekir. Örnekler kaynak incelemesiyle gözden geçirildi, çalıştırılmadı; kullandığınız sürücü sürümüyle ayrıca doğrulayın.
Gerçek dünyada kullanımı
- Daha eski bir sürümün farklı adlandırdığı alanlarla yazdığı müşteri belgelerini okuyan bir servis.
- Büyük bir koleksiyondan yalnızca birkaç alan gerektiren salt okunur raporlama görünümü.
- String olarak tutulan kimlikleri MongoDB'de ObjectId olarak saklayan ve sorguların tutarlı kalması gereken bir API.
Neden önemli
Eşleme kararları saklanan verinin şeklini belirler; C# tarafındaki bir yeniden adlandırma ya da ID değişikliği, alanları sabitlemeden ve gerçek BSON ile test etmeden mevcut belgelerin okunmasını sessizce bozabilir.