我在EF4 / .NET 4中使用.tt模板从我的模型和存储库生成自我跟踪实体以访问它们。在单元测试期间,我希望能够将“真正的”ObjectContext与基本的实体集合交换出来。我有一个内部方法,用测试数据预先加载这些存储库。
这工作正常,直到我需要访问这些实体的导航属性。我不想手动编写所有这些子集合的代码。相反,我想编写一系列Departments和Employees集合的代码:
public class Department
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
public List<Employee> Employees { get; set; }
}
public class Employee
{
public int EmployeeId { get; set; }
public int DepartmentId { get; set; }
public string Name { get; set; }
}
var departments = new[]
{
new Department { DepartmentId = 1, DepartmentName = "Purchasing" },
new Department { DepartmentId = 2, DepartmentName = "Sales" },
};
var employees = new[]
{
new Employee { DepartmentId = 1, EmployeeId = 1, Name = "Jan Smith" },
new Employee { DepartmentId = 1, EmployeeId = 2, Name = "Bob Jones" },
new Employee { DepartmentId = 2, EmployeeId = 3, Name = "Lisa Johnson" },
new Employee { DepartmentId = 2, EmployeeId = 4, Name = "Bill Porter" },
};
所以不知何故,鉴于这两个集合和我的EDM,我需要在我的“模拟上下文”中编写功能:
因此,最终结果是我的“采购”部门实体的员工集合加载了Jan Smith和Bob Jones。但基本上它应该只通过检查EDM来做到这一点,所以我不需要对这些关联进行两次编码。
随着我的模型扩展,我可以简单地创建平面测试数据的编码集合,但是当它们被加载到我的模拟存储库中时,它会计算出所有匹配的集合以及它们也具有匹配测试数据的类型。
所以基本上我正在寻找模拟.Include() - 像EF那样的模拟数据用于“真实”数据。我的问题是,有什么事情已经做到了吗?或者自己编码是否相对简单?我无法找到文档&amp;很多这方面的例子和提供的.tt模板(我希望用于指导/示例)非常复杂。