C#继承和接口混淆

C#继承和接口混淆,c#,inheritance,C#,Inheritance,我正在尝试使用fakes for EF 4.1 DataContext来测试存储库,而不测试数据库(由于部署问题) 我正在做这样的事情 public interface IEmployeeContext { IDbSet<Department> Departments { get; } IDbSet<Employee> Employees { get; } int SaveChanges(); } public class EmployeeCon

我正在尝试使用fakes for EF 4.1 DataContext来测试存储库,而不测试数据库(由于部署问题)

我正在做这样的事情

public interface IEmployeeContext
{
    IDbSet<Department> Departments { get; }
    IDbSet<Employee> Employees { get; }
    int SaveChanges();
}

public class EmployeeContext : DbContext, IEmployeeContext
{
    public IDbSet<Department> Departments { get; set; }
    public IDbSet<Employee> Employees { get; set; }
}

public class FakeEmployeeContext : IEmployeeContext
{
    public IDbSet<Department> Departments { get; set; }
    public IDbSet<Employee> Employees { get; set; }
    public FakeEmployeeContext ()
    {
        Departments = new FakeDbSet<Department>();
        Employees = new FakeDbSet<Employee>();
    }
}
它抱怨说

“IEmployeeContext”不包含“Entry”的定义


我似乎无法理解我需要在模式中更改什么以允许我访问context.Entry和context.Database部分

出现该特定错误的原因是
IEmployeeContext
不包含名为
Entry
的方法


Entry
DbContext
的成员

能否显示
上下文声明的代码
?这是否与强制转换相关的问题
IEmployeeContext
不定义
条目
属性/函数,而是在
DbContext
类中定义<代码>((IEEmployeeContext)context).Entry(department).State.可能会解决您的问题。似乎您希望您的FakeEmployeeContext也从DbContext继承,因为EmployeeContext的声明是第二个类…强制转换为IEEmployeeContext无助于其已解决的问题。。而强制转换到EmployeeContext将无法实现n接口的目的如果我使Entry方法成为IEEmployeeContext的一部分,那么我需要在EmployeeContext和FakeEmployeeContext中实现它,并且它已经在EmployeeContextRight中实现,该方法来自
DbContext
。一个可能的解决方案是让您的假类继承
DbContext
,尽管我对EF做得不够,无法告诉您这对您是否有用。只是对此做了一些挖掘,最坏的情况是,您可以从DbContext隐藏
Entry
方法以用于假员工上下文。我相信它应该是这样的:
publicnewdbentityentry条目(tenty实体),其中tenty:class{}
context.Entry(department).State  = EntityState.Modified;