假设我想单元测试Entity Framework的查询逻辑,一种方法是在构建表达式树之前将DbSet<T>
转换为IQueryable<T>
以便于模拟。这是“安全的”,有什么需要注意的吗?
答案 0 :(得分:6)
它不仅安全,而且是合法且完全标准的。这就是OO的全部意义所在。你只是沮丧。根据设计师定义的合同,DbSet
为IQUeryable
。
答案 1 :(得分:3)
小心AsQueryable()
。如果您的某个变量在调用IQueryable<IEntity>
之后属于AsQueryable()
类型,您不再知道该变量的具体类型(DbSet<IEntity>
例子)。
虽然从OOP的角度看它完全有效(这是接口的全部意义!),但它可能会导致很多错误/错误。请记住,在枚举DbSet<IEntity>
源之前,您实际上并不执行查询。
这就是为什么例如你不能加入内存IQueryable<IEntity>
(例如new List<IEntity>{ ... }.AsQueryable()
)与使用DbSet<IEntity>
的{{1}}的结果... < / p>