.Net Core MongoDB Generic Repository Oluşturma

Posted by

Merhaba arkadaşlar, bu yazımda sizlere .Net Core MongoDB Generic Repository Oluşturma konusundan bahsedeceğim.

Generic Repository, veri tabanı işlemleri için kullanacağımız Select, Insert, Update, Delete işlemleri için her seferinde tekrar tekrar yazmamak için oluşturacağımız bir pattern’dir. Bu yazımızda da MongoDB ile kullanımını gerçekleştireceğiz.

Repository Pattern ile ilgili detaylı bilgi için Repository Pattern Nedir? yazımı inceleyebilirsiniz.

.Net Core 6 ile bir Console uygulaması oluşturuyoruz.

MongoDB için gerekli paketin kurulumunu Nuget Package Manager üzerinden yüklüyoruz.

Bu işlemlerden sonra tablomuzun modelini oluşturuyoruz. Fakat belli başlı alanlar standart olabilir. Bunun için ilk olarak Abstract bir class oluşturarak ortak property’leri burada yazacağız.

public abstract class IMongoEntity
{
    BsonId]
    BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
}

Id kolonumuzu oluşturduk ve Product tablomuz için de bunun modelini aşağıdaki gibi oluşturabiliriz.

public class Product : IMongoEntity
{
   public string Name { get; set; }
}

Modelimizi oluşturduktan sonra da GenericRepository için interface ve class’ımızı oluşturuyoruz.

public interface IMongoGenericRepository<T> where T : IMongoEntity
{
    List<T> GetAll();
    T GetById(string id);
    void Insert(T entity);
    void Update(T entity);
    void Delete(string id);
}
public class MongoGenericRepository<T> : IMongoGenericRepository<T> where T : IMongoEntity
{
    protected readonly IMongoCollection<T> Collection;

    public MongoGenericRepository()
    {
        // connectionString
        var client = new MongoClient("mongodb://localhost:27017"); 
        var db = client.GetDatabase("test-mongo-db"); // db name

        Collection = db.GetCollection<T>(typeof(T).Name.ToLowerInvariant());
    }

    public void Delete(string id)
    {
        Collection.FindOneAndDelete(x=> x.Id == id);
    }

    public T GetById(string id)
    {
        return Collection.Find(x=> x.Id == id).FirstOrDefault();
    }

    public List<T> GetAll()
    {
        return Collection.AsQueryable().ToList();
    }

    public void Insert(T entity)
    {
        Collection.InsertOne(entity);
    }

    public void Update(T entity)
    {
        Collection.FindOneAndReplace(x=> x.Id == entity.Id, entity);
    }
}

Oluşturduğumuz GenericRepository sınıfımızı da kullanarak veri çekme işlemlerimizi gerçekleştirelim.

IMongoGenericRepository<Product> repository = new MongoGenericRepository<Product>();

var repoProducts = repository.GetAll();

.Net Core MongoDB ile Generic Repository oluşturma işlemleri yukarıdaki gibi yapılabilir.

Umarım faydalı olur.

Bir sonraki yazıda görüşmek üzere…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir