Reputation: 69
I am trying to implement unit of work and repository and all get and find works fine but i cant access the add and the update and delete. All other function which get things is ok (see screenshot)
IRepository
interface:
public interface IRepository<TEntity> where TEntity : class
{
IEnumerable<TEntity> GetAll();
TEntity GetByID(int Id);
IEnumerable<TEntity> Find(Expression<Func<TEntity,bool>> predicate);
void Add(TEntity entity);
void AddRange(IEnumerable<TEntity> entities);
void Remove(TEntity entity);
void RemoveRange(IEnumerable<TEntity> entities);
void Update(TEntity entity);
void Save();
}
Repository
class
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
private MemoryDataContext context;
public Repository(MemoryDataContext context)
{
this.context = context;
}
public IEnumerable<TEntity> GetAll()
{
return context.Set<TEntity>().ToList();
}
public TEntity GetByID(int id)
{
return context.Set<TEntity>().Find(id);
}
IEnumerable<TEntity> IRepository<TEntity>.Find(Expression<Func<TEntity, bool>>
predicate)
{
return context.Set<TEntity>().Where(predicate);
}
void IRepository<TEntity>.Add(TEntity entity)
{
context.Set<TEntity>().Add(entity);
}
void IRepository<TEntity>.AddRange(IEnumerable<TEntity> entities)
{
context.Set<TEntity>().AddRange(entities);
}
void IRepository<TEntity>.Remove(TEntity entity)
{
context.Set<TEntity>().Remove(entity);
}
void IRepository<TEntity>.RemoveRange(IEnumerable<TEntity> entities)
{
context.Set<TEntity>().RemoveRange(entities);
}
void IRepository<TEntity>.Update(TEntity entity)
{
context.Set<TEntity>().Update(entity);
}
public void Save()
{
context.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
Here is IUnitOfWork
interface:
public interface IUnitOfWork : IDisposable
{
Repository<Person> personRepository { get; }
Repository<Country> countryRepository { get; }
int Complete();
}
Upvotes: -1
Views: 86
Reputation: 609
As explained in the other answer that @Progman has commented under your question, you are implementing these methods explicitly, so you need to cast your class to the base interface type first in order to call them:
// newContry is an entity of type Country
(_unitOfWork.countryRepository as IRepository<Country>).Add(newCountry)
Upvotes: 0