C#继承和接口混淆
我正在尝试使用fakes for EF 4.1 DataContext来测试存储库,而不测试数据库(由于部署问题) 我正在做这样的事情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
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;