工作单元和存储库更新和添加不起作用

问题描述 投票:0回答:1

我正在尝试实现工作单元和存储库,所有获取和查找工作正常,但我无法访问添加、更新和删除。所有其他获取内容的功能都可以(参见屏幕截图)

IRepository
界面:

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
班级

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);
    }
}

这是

IUnitOfWork
界面:

public interface IUnitOfWork : IDisposable
{
     Repository<Person> personRepository { get; }
     Repository<Country> countryRepository { get; }
     int Complete(); 
}
c# unit-of-work
1个回答
0
投票

正如另一个答案中所解释的,@Progman 在您的问题下有评论,您正在显式实现这些方法,因此您需要首先将类转换为基本接口类型才能调用它们:

(_unitOfWork.countryRepository as IRepository<Country>).Add(newCountry)
© www.soinside.com 2019 - 2024. All rights reserved.