2

我有这个设置并得到一个编译器警告“......隐藏继承的成员......”。我该如何解决?

public interface IRepository<T> where T : class
{
    IQueryable<T> GetAll();
    T GetById(int id);
}

public class EFRepository<T> : IRepository<T> where T : class
{
    public EFRepository(DbContext dbContext)
    {
        if (dbContext == null)
            throw new ArgumentNullException("dbContext");
        DbContext = dbContext;
        DbSet = DbContext.Set<T>();
    }

    protected DbContext DbContext { get; set; }

    protected DbSet<T> DbSet { get; set; }

    public virtual IQueryable<T> GetAll()
    {
        return DbSet;
    }

    public virtual T GetById(int id)
    {
        return DbSet.Find(id);
    }

}

public interface IProductRepository : IRepository<Product>
{
    // Product specific interface code here
}

public class ProductRepository : EFRepository<Product>, IProductRepository
{
    public ProductRepository(DbContext context) : base(context) { }

    public IQueryable<Product> GetAll()
    {
        return DbSet.Include("Table1").Include("Table2").AsQueryable();
    }
}

我收到编译器警告消息,但在运行应用程序时出现StackOverflowException错误。添加新关键字仍然会产生StackOverflowException错误。覆盖关键字不起作用。如果我注释掉这个ProductRepository GetAll()方法,一切都很好。但我需要重写该GetAll()方法。

谢谢。

4

1 回答 1

3

使用“new”关键字标记 ProductRepository.GetAll:

public new IQueryable<Product> GetAll()
{
    return DbSet.Include("Table1").Include("Table2").AsQueryable();
}

这将隐藏方法 EFRepository.GetAll()。

如果您希望两种方法返回相同的结果,您还可以选择覆盖基本方法:

public override IQueryable<Product> GetAll()
{
    return DbSet.Include("Table1").Include("Table2").AsQueryable();
}
于 2013-04-22T18:46:49.887 回答