MongoDB
MongoDB, NoSQL kavramıyla ortaya çıkmış document-oriented veri modelini kullanan açık kaynak bir veritabanıdır.
Bu yazımda .Net projelerinizde nasıl MongoDB kullanabileceğinizi anlatacağım.
Bu Makalemde MongoDB kurulumuna değinmeyeceğim, kurduğunuzu varsayarak anlatım yapacağım.
Bu Makale bulunan kodların proje halini buradan indirebilirsiniz.
MongoDB vs SQL
Aşağıda bazı SQL terimlerinin MongoDB karşılıklarını görüyorsunuz.
|SQL||MongoDB|
|database||database|
|table||collection|
|column||field|
|row||document|
MongoDB Driver kurulumu
MongoDB bir çok programlama dilini destekler ve bunlar için ayrı driverları vardır.
Bu driverlar uygulamamızın MongoDB ile iletişim kurabilmesini sağlar.
Bu yüzden .Net için olan driverı biz NuGet aracılığı ile projemize dahil edeceğiz.
Package Manager Console ‘a aşağıdaki kodu yazıp kurabilirsiniz.
Install-Package MongoDB.Driver -Version 2.4.4
Ya da projenize sağ tıklayıp Manage NuGet Packages seçeneğinden MongoDB.Driver yazıp arayarak çıkan pakedi kurabilirsiniz.
Ben bu makaleyi yazarken kullandığım sürüm 2.4.4 sürümü. Kodlar sürümlere göre farklılık gösterebilir.
Repository pattern ile örnek uygulama
Burada entity sınıfımızı projemize eklediğimiz driverdaki attributeleri kullanarak oluşturuyoruz.
Id alanlarını
[BsonId] diğer alanları ise
[BsonElement(..)] attribute ile işaretliyoruz.
Id lerimizin tipi ise dikkat ederseniz ObjectId türünden.
Bu şekilde field larımızı attribute ler yardımıyla isimlendirmiş olduk.
Asenkron bi şekilde repository interface ‘imizi de CRUD işlemlerimiz için hazırlıyoruz..
Context sınıfımızı da yukarıdaki gibi tasarlıyoruz.
Burada dikkatinizi çeken
IMongoDatabase interface ‘i bizim veritabanımızı temsil ediyor.
MongoUrl sınıfını ise bizim connection string ‘imiz üzerinden veritabanı adını alabilmemiz için kullandık.
MongoRepository adında generic bir abstract repository sınıfımızı yukarıdaki gibi hazırlıyoruz.
IRepository<T> interface ‘imizi de giydiriyoruz sınıfımıza.
IMongoCollection<T> Başta gösterdiğim tablodaki gibi collection, SQL karşılığı ile bizim tablolarımızdır diyebiliriz.
Burada bir de AddNewAsync methodumuzu görüyorsunuz.
Collection property ‘mizin InsertOneAsync methodu ile veritabanımıza ekleme yapıyoruz.
Burada açıkçası pek fazla açıklama yapmaya gerek olmadığını düşünüyorum. MongoRespository sınıfımızın diğer methodları buradakiler.
Sorgulama yaparken (GetByX.. methodlarımızda) filtreleme yapabilmek için Builder sınıfından yararlanıyoruz. Ya da linq methodları ile de yapabilirsiniz bunu tabii. Burada update işleminde linq kullandık.
UserRepository ‘mizi de oluşturduk.
_dataContext.Database.GetCollection<User>("users"); Burada tırnak içinde “users” yazdığım yere siz tabiiki kendi koleksiyonunuza vermek istediğiniz adı gireceksiniz.
Buraya kadar tamam.
Bir de pratik olsun diye UnitOfWork yapalım hadi.
Ve aşağıda da oluşturduğumuz sınıflarımızı kullanarak CRUD işlemlerimizi gerçekleştirdiğimiz bir test sınıfımız var.
Bir sonraki yazıda görüşmek üzere.