Skip to content

Instantly share code, notes, and snippets.

@danielkillyevo
Created July 29, 2013 19:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielkillyevo/6106876 to your computer and use it in GitHub Desktop.
Save danielkillyevo/6106876 to your computer and use it in GitHub Desktop.
Generic repository pattern + unit of work
public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected readonly DbContext _context;
protected readonly DbSet<TEntity> _dbSet;
protected BaseRepository(DbContext context)
{
_context = context;
_dbSet = context.Set<TEntity>();
}
public TEntity Get(int Id)
{
return _dbSet.Find(Id);
}
public IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, Type[] includePropertyTypes = null)
{
IQueryable<TEntity> query = _dbSet;
if (filter != null)
query = query.Where(filter);
//note: can be here
if (includePropertyTypes != null)
{
IEnumerable<string> includePropertyNames = includePropertyTypes.Select(t => t.Name);
foreach (var propertyName in includePropertyNames)
query.Include(propertyName);
}
if (orderBy != null)
query = orderBy(query);
return query;
}
public void Add(TEntity entity)
{
_dbSet.Add(entity);
}
public void Update(TEntity entity)
{
_dbSet.Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
}
public void Remove(TEntity entity)
{
if (_context.Entry(entity).State == EntityState.Detached)
_dbSet.Attach(entity);
_dbSet.Remove(entity);
}
}
public class EntityRepository : BaseRepository<Blog>, IEntityRepository
{
public EntityRepository(DbContext context)
: base(context)
{
}
}
public interface IRepository<TEntity> where TEntity : class
{
TEntity Get(int Id);
IQueryable<TEntity> Get(Expression<Func<TEntity,bool>> filter = null, Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>> orderBy = null, Type[] includePropertyTypes = null);
void Add(TEntity entity);
void Update(TEntity entity);
void Remove(TEntity entity);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment