只要您的抽象返回IQueryable
(如DbSet
),那么您就可以创建自己的Include
扩展IQueryable
. 您的代码将自动调用您的新 Include 扩展方法。当用于返回 a 的抽象时DbQuery
,它将调用正确的 Invoke,否则如果它是一个IQueryable
实例,它将什么也不做。添加这个新的扩展方法意味着您当前的代码应该无需任何更改即可编译。
像这样:
/// see: http://msdn.microsoft.com/en-us/library/ff714955.aspx
///
/// The method has been modified from version that appears in the referenced article to support DbContext in EF 4.1 ->
///
/// </summary>
public static class ModelExtensions {
public static IQueryable<T> Include<T>
(this IQueryable<T> sequence, string path) where T : class {
var dbQuery = sequence as DbQuery<T>;
if (dbQuery != null) {
return dbQuery.Include(path);
}
return sequence;
}
}
因此,如果您的单元测试使用虚假IQueryable
列表,则 Include 将不会执行任何操作。
我必须补充一点,对于为什么模拟 EntityFramework 是不好的和毫无价值的,我有强烈的意见。如果您还没有看到它们,那么检查它们可能是值得的。