using System; using System.Collections.Generic; using System.Linq; using System.Data.Entity; using System.Linq.Expressions; using PagedList; using <%= modelProjectName %>; using <%= repoProjectName %>.Infrastructure; using <%= repoProjectName %>.Models; namespace <%= repoProjectName %>.Infrastructure { public abstract class RepositoryBase where T : class { private <%= contextName %> dataContext; private readonly IDbSet dbset; protected RepositoryBase(IDatabaseFactory databaseFactory) { DatabaseFactory = databaseFactory; dbset = DataContext.Set(); } protected IDatabaseFactory DatabaseFactory { get; private set; } protected <%= contextName %> DataContext { get { return dataContext ?? (dataContext = DatabaseFactory.Get()); } } public virtual void Add(T entity) { dbset.Add(entity); } public virtual void Update(T entity) { dbset.Attach(entity); dataContext.Entry(entity).State = EntityState.Modified; } public virtual void Delete(T entity) { dbset.Remove(entity); } public virtual void Delete(Expression> where) { IEnumerable objects = dbset.Where(where).AsEnumerable(); foreach (T obj in objects) dbset.Remove(obj); } public virtual T GetById(long id) { return dbset.Find(id); } public virtual T GetById(string id) { return dbset.Find(id); } public virtual IEnumerable GetAll() { return dbset.ToList(); } public virtual IEnumerable GetMany(Expression> where) { return dbset.Where(where).ToList(); } /// /// Return a paged list of entities /// /// /// Which page to retrieve /// Where clause to apply /// Order by to apply /// public virtual IPagedList GetPage(Page page, Expression> where, Expression> order) { var results = dbset.OrderBy(order).Where(where).GetPage(page).ToList(); var total = dbset.Count(where); return new StaticPagedList(results, page.PageNumber, page.PageSize, total); } public T Get(Expression> where) { return dbset.Where(where).FirstOrDefault(); } } }