Asp.Net MVC Repository Pattern Kullanımı

Yazılıma-Başlangıç_emresupcinMerhaba.

Büyük projelerde kod tekrarından, spagetti kodlardan kaçınmak gerekir. Anlaşılmayan  ve standartlara uymayarak yazılan kodun bir anlamı olmayacağı gibi bir yararı da olmayacaktır.
Asp.Net Mvc ‘de Repository yaklaşımının kullanımını anlatacağım.
Tabii ki mvc frameworke  özel birşey değil, diğer c# teknolojilerininde de kullanılabilir.
data access,interface gibi
katmanlara gerek kalmadan Repository için tek katmanın yeterli olduğu mimariden bahsedeceğim.

Aslında çokta anlatılacak birşey de yok,kodlar açıklayıcı olacaktır. Generic class özelliğini kullanarak her tipte ki classlar için
işlemler yapabileceğiz.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Objects;
using OtelRezervasyon.Models;
using System.Linq.Expressions;

public class Repository<T> where T : class
{
 ObjectContext _context;
 IObjectSet<T> _objectSet; // Data nesnelerimiz üzerinde değişiklikler yapmamızı sağlar (AddObject,Attach,DeleteObject,Detach)
 //İki kurucu fonksiyonumuz, birinci ile daha önceden belirlediğimiz bir tipte entitycontextimizi belirliyoruz, ikincisinde ise istediğimiz contexti sınıfımızın objectseti olarak set ediyoruz.
 public Repository()
 {
 _context = new otelEntities();
 _objectSet = _context.CreateObjectSet<T>();
 }
 public Repository(ObjectContext objectContext)
 {
 _context = objectContext;
 _objectSet = _context.CreateObjectSet<T>();
 }

//Entity'imizi otomatik tip dönüşümü ile Queryable yapıyoruz
 public IQueryable<T> AsQueryable()
 {
 return _objectSet;
 }

//parametre olarak geçtiğimiz lambda koşuluyla uyuşan ilk sonucu alan sorgu
 public T First(Expression<Func<T, bool>> where)
 {
 return _objectSet.First(where);
 }

//parametre olarak geçtiğimiz lambda koşuluyla uyuşan sonuçları alan sorgu
 public IEnumerable<T> Find(Expression<Func<T, bool>> where)
 {
 return _objectSet.Where(where);
 }

//ekleme,silme ve güncelleme işlemleri
 public void Delete(T entity)
 {
 _objectSet.DeleteObject(entity);
 _context.SaveChanges();
 }

public void Add(T entity)
 {
 _objectSet.AddObject(entity);
 _context.SaveChanges();
 }

public void Attach(T entity)
 {
 _objectSet.Attach(entity);
 _context.SaveChanges();
 }
 public void Update(T entity)
 {

 _context.SaveChanges();
 }

//Son fonksiyonumuz diğerlerine nezaran daha spesifik olduğu için sona bıraktım, sorugumuza parametre olarak hem where ifadesi hem de orderby ifadesi geçiyoruz
 public IEnumerable<T> GetAllByDescending<F>(Expression<Func<T, bool>> query, Expression<Func<T, F>> order, int skip = 0, int take = 0)
 {
 IQueryable<T> tq = _objectSet.AsQueryable();
 if (query != null)
 tq = _objectSet.Where(query);

tq = tq.OrderBy(order);

if (take != 0)
 {
 tq = tq.Skip(skip).Take(take);
 }

return tq;

}

}

Kullanım örneği:


int t = rAdmin.Find(m => m.UserName == kadi && m.Password ==pass ).Count();

Admin a = rAdmin.First(m => m.UserName == kadi && m.Password == pass);
 a.LastLoginDate = DateTime.Now;
 rAdmin.Update(a);

 

Yazar: Yunus Emre SEYHAN

Yazılım Uzmanı, İstanbul 1992 doğumlu, Trabzon'lu

Bu yazıyı paylaş

  • facebook-share
  • tweet-it
  • friendfeed
  • plus-it

yorumlar

2 Yorum Yapıldı