ASP.NET Core 2.1 ile MongoDB Üzerinde Repository Pattern Kullanarak CRUD İşlemlerinin Yapılması

Ertuğrul Gamgam
3 min readJan 13, 2019

Herkese merhaba. Uzun zamandır aklımda medium.com’a makale ekleme fikri vardı. Fakat bir yandan okul bir yandan iş bir türlü zaman ayıramadım. Hazır okul tatil olmuşken fırsat bu fırsat deyip ilk makalemle sizlerleyim.

MongoDB

MongoDB open source NoSQL çözümüdür. Peki neden RDBMS(Relational Database Management System) ler varken NoSQL kullanmayı tercih ederiz? Sürekli artan veri boyutları, sistemimizin okuma ve yazma işlemlerinde performans kaybı yaşamasına sebep olmaktadır. Bir de yüksek trafikli bir sistemimiz varsa performans kayıplarının yaşanması kaçınılmaz oluyor. NoSQL sistemler bu performans kaybını önlemede en büyük yardımcılarımızdan biri oluyorlar.

RDBMS kavramlarından table MongoDB’de collectionlara, row ise document kavramına karşılık gelmektedir.

Projeyi buradan indirebilirsiniz.

Öncelikle Visual Studio üzerinden bir ASP.Net Core API projesi oluşturalım. Sonrasında Mongo driver’ı projemize dahil edelim.

Install-Package MongoDB.Driver -Version 2.7.2

Artık model class’ımızı yazarak kodlamaya başlayabilirz. Öncelike MongoBaseModel adlı abstract bir class oluşturuyoruz.

ObjectId MongoDB’de document’lerin primary key’idir. Bir document oluşturulduğunda MongoDB tarafından objectid atanır. Yani her document bir objectid’e sahiptir. .NET Core tarafında da bir class’ın MongoDB model class’ı olabilmesi için “ObjectId” türünden “Id” isimli property’e sahip olması gerekmektedir.

Sonrasında RockSongs isimli model class’ımızı oluşturuyoruz. Bu class MongoBaseModel class’ını inherit ediyor. BsonElement MongoDB tarafında, collection’ın property’sini isimlendirmek amacıyla kullanılan bir attribute.

Şimdi gelelim işin en eğlenceli yanı olan Repository bölümüne.

Her model’imiz için tekrardan repository yazarak kod tekrarı yapmak yerine abstract bir base repository oluşturuyoruz ve TModel generic türünü tanımlıyoruz.

Constructor’da ise MongoDB’ye bağlanma işlemlerini gerçekleştiriyoruz ve istediğimiz collection’ın getirilmesini sağlıyoruz.

RockSongsRepository’miz, RockSongs modeli ile CRUD işlemlerini sağlayacak service’imiz. Artık burada repository pattern kullanımının faydalarını görmeye başlıyoruz. RockSongsRepository, BaseMongoRepository’i inherit ediyor ve TModel olarak da RockSongs belirtiliyor. Bunlar dışında, başka bir kod yazmadan RockSongsRepository’nin CRUD işlemlerini yerine getirmesini sağlamış oluyoruz.

appsettin.json’a connection string’imi eklemeyi unutmuyoruz tabi ki.

Sonrasında MongoRockSongsRepository’i transient service olarak ekliyoruz. Burada constructor içinde ki Songs isimli parametre database ismine, RockSongs ise collection ismine karşılık geliyor. Önceden MongoDB üzerinde bu isimlerde database ve colletion oluşturmanıza gerek yok. İlk documenti eklemeyi denediğinizde mongo driver sizin için bu yapıları oluşturuyor.

Şimdi son olarak controller class’ımızı oluşturmaya geldik. Öncelikle bir base controller oluşturuyoruz ardından bu base controller’ı inherit eden bir RockSongsController oluşturuyoruz.

BaseMongoController, BaseMongoRepository’i constructor injection ile inject ediyor.

Şimdi postman ile projemizi test edelim.

Önce service’e iki defa aynı veriler ile post request gönderiyorum.

Sonrasında get reqeust gönderiyorum ve service’mizin başarılı bir şekilde çalıştığını görüyoruz.

İlk makalemizin sonuna geldik. Yeni bir makalede görüşmek üzere hoşçakalın.

--

--