Data Acces Layer Repository oluşturma

Data Katmanımızda Generic Repository oluşturma yapacağız daha önceki konumuzda Generic İnterface oluşturmuştuk. şimdi bu Interfaces kullanarak Repository Classımızı oluştururalım

public class Repository<T> : IDataAccess<T> where T :class
    {

        private DatebaseContext db;
        private DbSet<T> _objectSet;
        
        public Repository()
        {
            db = RepositoryBase.CreateContext();
            _objectSet = db.Set<T>();
        }
        public int Insert(T obj)
        {
            _objectSet.Add(obj);
            return Save();
        }
        public List<T> List()
        {
            return _objectSet.ToList();
        }
        public IQueryable<T> List(Expression<Func<T, bool>> where)
        {
            return _objectSet.Where(where);
        }

        public T GetById(int Id)
        {
            return _objectSet.Find(Id);
        }

        public T GetByUserPassword(Expression<Func<T, bool>> where)
        {
            return _objectSet.FirstOrDefault(where);
        }


        public int Update(T obj)
        {
            return Save();
        }
        public int Delete(T obj)
        {
            _objectSet.Remove(obj);
            return Save();

        }
        public int Save()
        {
            return db.SaveChanges();
        }

        public T Find(Expression<Func<T, bool>> where)
        {

            return _objectSet.FirstOrDefault(where);
        }
    }
Public class RepositoryBase
    {
        private static DatebaseContext _db;

        private  static  object _lock=new  object();

        protected  RepositoryBase()
        {
            
        }
        public static DatebaseContext CreateContext()
        {
            if (_db==null)
            {
                lock (_lock)
                {
                    if (_db==null)
                    {
                          _db=new DatebaseContext(); 
                    }
                 
                }
                
            }

            return _db;
        }

    }

Bir cevap yazın

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