繁体   English   中英

正在调用AsQueryable <T> 在DbSet上 <T> “安全”?

[英]Is calling AsQueryable<T> on a DbSet<T> “safe”?

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

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

小心使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM