5

假设我想对实体框架的查询逻辑进行单元测试,一种方法是在构建表达式树之前将其转换为DbSet<T>以便于模拟。IQueryable<T>这是“安全的”吗?有什么需要注意的吗?

4

2 回答 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 回答