patterncsharpMinor
BaseRepository for EF6
Viewed 0 times
ef6forbaserepository
Problem
Is this okay?
public class BaseRepository where T : class
{
private readonly DbContext _dbContext;
public BaseRepository(DbContext dbContext)
{
_dbContext = dbContext;
}
public T Get(Func predicate)
{
return GetAll(predicate).FirstOrDefault();
}
public IEnumerable GetAll(Func predicate = null)
{
IEnumerable result = _dbContext.Set().AsEnumerable();
return (predicate == null) ? result : result.Where(predicate);
}
public void Add(T entity)
{
_dbContext.Entry(entity).State = EntityState.Added;
}
public void Delete(Func predicate)
{
IEnumerable entities = GetAll(predicate);
foreach (T entity in entities)
_dbContext.Entry(entity).State = EntityState.Deleted;
}
public void Delete(T entity)
{
_dbContext.Entry(entity).State = EntityState.Deleted;
}
public void Update(T entity)
{
_dbContext.Entry(entity).State = EntityState.Modified;
}
public async void Save()
{
await _dbContext.SaveChangesAsync();
}
public void Dispose()
{
if (_dbContext != null)
_dbContext.Dispose();
}
}Solution
It seems strange to me for
Caveat: I don't write C# so perhaps this doesn't match the standard pattern there.
Get to be a specific way of getting all items, and GetAll should always return all items. Introduce a GetSome helper for clarity.public T Get(Func predicate) {
return GetWhere(predicate).FirstOrDefault();
}
public IEnumerable GetAll() {
return GetWhere(null);
}
public IEnumerable GetWhere(Func predicate) {
IEnumerable result = _dbContext.Set().AsEnumerable();
return (predicate == null) ? result : result.Where(predicate);
}Caveat: I don't write C# so perhaps this doesn't match the standard pattern there.
Code Snippets
public T Get(Func<T, bool> predicate) {
return GetWhere(predicate).FirstOrDefault();
}
public IEnumerable<T> GetAll() {
return GetWhere(null);
}
public IEnumerable<T> GetWhere(Func<T, bool> predicate) {
IEnumerable<T> result = _dbContext.Set<T>().AsEnumerable();
return (predicate == null) ? result : result.Where<T>(predicate);
}Context
StackExchange Code Review Q#51095, answer score: 5
Revisions (0)
No revisions yet.