我进行了此设置,并收到一个编译器警告“ ...隐藏继承的成员...”。我该如何解决?
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()
方法。谢谢。
最佳答案
使用“ 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();
}
关于c# - C#隐藏继承的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15973008/