假设我想对实体框架的查询逻辑进行单元测试,一种方法是在构建表达式树之前将其转换为DbSet<T>
以便于模拟。IQueryable<T>
这是“安全的”吗?有什么需要注意的吗?
问问题
2486 次
2 回答
7
它不仅安全,而且合法且完全标准。这就是面向对象的全部内容。你只是垂头丧气。根据设计师定义的合同, ADbSet
必须是。IQUeryable
于 2013-01-04T13:34:13.370 回答
4
小心AsQueryable()
。如果您的变量之一是IQueryable<IEntity>
调用后的类型AsQueryable()
,那么您将不再知道该变量的具体类型是什么(DbSet<IEntity>
在您的示例中)。
虽然从 OOP 的角度来看它是完全有效的(这就是接口的全部意义!),但它可能会导致很多错误/错误。请记住,在枚举DbSet<IEntity>
源之前,您实际上并没有执行查询。
这就是为什么例如您不能将内存中IQueryable<IEntity>
(例如new List<IEntity>{ ... }.AsQueryable()
)与DbSet<IEntity>
using .Union(...)
...
于 2013-01-04T13:48:00.140 回答