Revision: 23283
Updated Code
at February 3, 2010 08:33 by bokkers
Updated Code
// Interface defining all repository functions
interface IRepository<EntityType, IdType>
{
IQueryable<EntityType> GetAll();
EntityType GetById(IdType id);
void Add(EntityType newEntity);
void Delete(EntityType entity);
void Save();
}
// Repository base class (needs override)
public class Repository<EntityType, IdType> : IRepository<EntityType, IdType>
{
protected Func<IQueryable<EntityType>> QueryFunction { set; get; }
protected Func<IdType, EntityType> GetByIdFunction { set; get; }
protected Action SaveAction { set; get; }
protected Action<EntityType> AddAction { set; get; }
protected Action<EntityType> DeleteAction { set; get; }
public IQueryable<EntityType> GetAll()
{
if (QueryFunction == null)
throw new RepositoryException("QueryFunction property not set");
try
{
return QueryFunction();
}
catch (Exception e)
{
throw new RepositoryException("Error in GetAll", e);
}
}
public EntityType GetById(IdType id)
{
if (GetByIdFunction == null)
throw new RepositoryException("GetByIdFunction property not set");
try
{
EntityType entity = GetByIdFunction(id);
return entity;
}
catch(Exception e)
{
throw new RepositoryException("Error in GetByID", e);
}
}
public void Add(EntityType newEntity)
{
if (AddAction == null)
throw new RepositoryException("AddAction property not set");
try
{
AddAction(newEntity);
}
catch(Exception e)
{
throw new RepositoryException("Error in Add", e);
}
}
public void Delete(EntityType entity)
{
if (DeleteAction == null)
throw new RepositoryException("DeleteAction property not set");
try
{
DeleteAction(entity);
}
catch (Exception e)
{
throw new RepositoryException("Error in Delete", e);
}
}
public void Save()
{
if (SaveAction == null)
throw new RepositoryException("SaveAction property not set");
try
{
SaveAction();
}
catch (Exception e)
{
throw new RepositoryException("Error in Save", e);
}
}
}
public class RepositoryException : Exception
{
public RepositoryException(string message)
: base(message)
{
}
public RepositoryException(string message, Exception inner)
: base(message, inner)
{
}
}
// Example repository implementation, using Entity Framework as DAL
public class PersonRepository : Repository<Person, int>
{
DatabaseEntities _context;
public PersonRepository()
{
_context = new DatabaseEntities();
QueryFunction = () => _context.Person;
GetByIdFunction = id => _context.Person.FirstOrDefault(p => p.ID == id);
AddAction = p => _context.AddToPerson(p);
DeleteAction = p => _context.DeleteObject(p);
SaveAction = () => _context.SaveChanges();
}
}
Revision: 23282
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 3, 2010 08:31 by bokkers
Initial Code
// Interface defining all repository functions
interface IRepository<EntityType, IdType>
{
IQueryable<EntityType> GetAll();
EntityType GetById(IdType id);
void Add(EntityType newEntity);
void Delete(EntityType entity);
void Save();
}
// Repository base class (needs override)
public class Repository<EntityType, IdType> : IRepository<EntityType, IdType>
{
protected Func<IQueryable<EntityType>> QueryFunction { set; get; }
protected Func<IdType, EntityType> GetByIdFunction { set; get; }
protected Action SaveAction { set; get; }
protected Action<EntityType> AddAction { set; get; }
protected Action<EntityType> DeleteAction { set; get; }
public IQueryable<EntityType> GetAll()
{
if (QueryFunction == null)
throw new RepositoryException("QueryFunction property not set");
try
{
return QueryFunction();
}
catch (Exception e)
{
throw new RepositoryException("Error in GetAll", e);
}
}
public EntityType GetById(IdType id)
{
if (GetByIdFunction == null)
throw new RepositoryException("GetByIdFunction property not set");
try
{
EntityType entity = GetByIdFunction(id);
return entity;
//return QueryFunction().FirstOrDefault(entity => id.Equals(GetIdFunction(entity)));
}
catch(Exception e)
{
throw new RepositoryException("Error in GetByID", e);
}
}
public void Add(EntityType newEntity)
{
if (AddAction == null)
throw new RepositoryException("AddAction property not set");
try
{
AddAction(newEntity);
}
catch(Exception e)
{
throw new RepositoryException("Error in Add", e);
}
}
public void Delete(EntityType entity)
{
if (DeleteAction == null)
throw new RepositoryException("DeleteAction property not set");
try
{
DeleteAction(entity);
}
catch (Exception e)
{
throw new RepositoryException("Error in Delete", e);
}
}
public void Save()
{
if (SaveAction == null)
throw new RepositoryException("SaveAction property not set");
try
{
SaveAction();
}
catch (Exception e)
{
throw new RepositoryException("Error in Save", e);
}
}
}
public class RepositoryException : Exception
{
public RepositoryException(string message)
: base(message)
{
}
public RepositoryException(string message, Exception inner)
: base(message, inner)
{
}
}
// Example repository implementation, using Entity Framework as DAL
public class PersonRepository : Repository<Person, int>
{
DatabaseEntities _context;
public PersonRepository()
{
_context = new DatabaseEntities();
QueryFunction = () => _context.Person;
GetByIdFunction = id => _context.Person.FirstOrDefault(p => p.ID == id);
AddAction = p => _context.AddToPerson(p);
DeleteAction = p => _context.DeleteObject(p);
SaveAction = () => _context.SaveChanges();
}
}
Initial URL
Initial Description
Initial Title
IRepository using lambda expressions
Initial Tags
Initial Language
C#