![](/img/trans.png)
[英]Filter on DBSet, DBSet.AsQueryable() or DBSet.AsQueryable<T>()
[英]Is calling AsQueryable<T> on a DbSet<T> “safe”?
假设我想单元测试Entity Framework的查询逻辑,一种方法是在构建表达式树之前将DbSet<T>
转换为IQueryable<T>
以便于DbSet<T>
。 这是“安全的”,有什么需要注意的吗?
它不仅安全,而且是合法的,完全标准的。 这就是OO的全部意义所在。 你只是沮丧。 根据设计者定义的合同, DbSet
是IQUeryable
。
小心使用AsQueryable()
。 如果在调用AsQueryable()
, 您的某个变量的类型为IQueryable<IEntity>
,则您不再知道该变量的具体类型是什么 (在您的示例中为 DbSet<IEntity>
)。
虽然它从OOP的角度来看是完全有效的 (这是界面的全部意义!),但它可能会导致很多错误/错误。 请记住,在枚举DbSet<IEntity>
源之前,您实际上并不执行查询。
这就是为什么例如你不能使用.Union(...)
的DbSet<IEntity>
的结果加入内存中的IQueryable<IEntity>
(例如new List<IEntity>{ ... }.AsQueryable()
) .Union(...)
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.