Skip to content

Instantly share code, notes, and snippets.

@luisrudge
Created October 17, 2012 17:47
Show Gist options
  • Save luisrudge/3906998 to your computer and use it in GitHub Desktop.
Save luisrudge/3906998 to your computer and use it in GitHub Desktop.
public interface IDomainEntity
{
object Id { get; set; }
}
public interface IRepository<T> : IDisposable where T : IDomainEntity
{
IQueryable<T> GetAll();
IQueryable<T> Query(string sql, params object[] args);
IQueryable<T> PagedQuery(long pageNumber, long pageSize, string sql, params object[] args);
T Get(object key);
void Add(T entity);
void Delete(T entity);
void Update(T entity, object key);
void Save();
}
public class MockRepository<T> : IRepository<T> where T : IDomainEntity
{
private Collection<T> items { get; set; }
public MockRepository()
{
items = new Collection<T>();
}
public IQueryable<T> GetAll()
{
return this.items.AsQueryable();
}
public IQueryable<T> Query(string sql, params object[] args)
{
return items.AsQueryable().Where(sql, args);
}
public IQueryable<T> PagedQuery(long pageNumber, long pageSize, string sql, params object[] args)
{
int skip = ((pageNumber - 1) * pageSize) > int.MaxValue ? int.MaxValue : (int)((pageNumber - 1) * pageSize);
int take = pageSize > int.MaxValue ? int.MaxValue : (int)pageSize;
return this.Query(sql, args).Skip(skip).Take(take);
}
public void Add(T entity)
{
items.Add(entity);
}
public void Delete(T entity)
{
items.Remove(entity);
}
public void Update(T entity, object key)
{
items.Remove(items.Where(k => k.Id == key).FirstOrDefault());
}
public T Get(object key)
{
return items.Where(k => k.Id == key).FirstOrDefault();
}
public void Save() { }
public void Dispose()
{
if(this.items != null)
this.items.Clear();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment