我正在处理一个带有从EDMX文件生成的DbContext类的项目。我需要在某些情况下根据身份验证状态过滤一些记录,而不是重写代码以在从DbContext类接收记录后过滤记录我首先假设创建另一个继承自原始DbContext的类很简单然后重写getter和setter,然后使用新类。像这样:
public partial class AutogeneratedBaseClass : DbContext
{
...
public virtual DbSet<Record> Records { get; set; }
...
}
public class ChildClass : AutogeneratedBaseClass
{
...
public override DbSet<Record> Records
{
get {
return (DbSet<Record>) base.Records.Where(...);
}
set {}
}
}
这编译很好,但是当我运行它时,base为null并且调试产生“错误CS0175:使用关键字'base'在此上下文中无效。”
无论如何要做到这一点?或者我需要寻找其他解决方案吗?谢谢!
答案 0 :(得分:1)
可能最好使用组合而非继承如下:
实施DbContext
public class MainDbContext : DbContext
{
public DbSet<Record> Records { get;set; }
}
然后实施过滤后的版本
public class FilteredDbContext
{
private readonly MainDbContext dbContext;
public FilteredDbContext(MainDbContext dbContext)
{
this.dbContext = dbContext;
}
public IQueryable<Record> Records
{
get { return dbContext.Records.Where(...); }
}
}
理想情况下,两者都应该有接口,因此不要直接依赖于具体的类。