在DbSet <t>“safe”上调用AsQueryable <t>?</t> </t>

时间:2013-01-04 13:31:47

标签: c# .net entity-framework-6

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

2 个答案:

答案 0 :(得分:6)

它不仅安全,而且是合法且完全标准的。这就是OO的全部意义所在。你只是沮丧。根据设计师定义的合同,DbSetIQUeryable

答案 1 :(得分:3)

小心AsQueryable()。如果您的某个变量在调用IQueryable<IEntity>之后属于AsQueryable()类型,您不再知道该变量的具体类型DbSet<IEntity>例子)。

虽然从OOP的角度看它完全有效(这是接口的全部意义!),但它可能会导致很多错误/错误。请记住,在枚举DbSet<IEntity>源之前,您实际上并不执行查询。

这就是为什么例如你不能加入内存IQueryable<IEntity>(例如new List<IEntity>{ ... }.AsQueryable())与使用DbSet<IEntity>的{​​{1}}的结果... < / p>