【问题标题】:ObjectQuery - what is it, how to get to it?ObjectQuery - 它是什么,如何获得它?
【发布时间】:2020-03-01 21:34:54
【问题描述】:

我正在阅读Linq to Entities

ObjectQuery<T> 在这些文档中占有重要地位,但我不太明白它是什么。从我读到的,它是一个代表查询的对象。我一直认为,当我编写一个 Linq 查询时,我会从中得到一个 IQueryable,所以我可以 a) 进一步编写它或 b) 枚举它以便从数据库中获取数据。

  1. ObjectQueryIQueryable 有何不同?
  2. 文章中提到的“命令树查询”是什么?它与表达式树有何不同
  3. 我可以从编写 Linq 查询时得到的 IQueryable 转到 ObjectQuery 吗?

链接:

https://docs.microsoft.com/en-us/dotnet/api/system.data.objects.objectquery-1?view=netframework-4.8

【问题讨论】:

  • 其实它已经过时了,一旦它很重要,在 EF 5 之前这是处理查询的方式,它是为了向后兼容而保留的,以及 ObjectContext。不要开始学习这个,除非你有旧代码需要维护。
  • 有问题的文章并没有真正指出这是一种旧的做事方式这一事实。他们应该说得更清楚。

标签: c# entity-framework linq-to-entities


【解决方案1】:

它是 System.Data 的一部分,与 LINQ 不同。由于它将 SQL 字符串转换为对象,因此如果出于某些原因不想使用 LINQ 或 EF,它可能会很有用。 EF 中较新的版本是

context.SqlQuery("Select * from Students").ToList<Student>();

将与

相同
new ObjectQuery<Student>("Select * from Students", context).

后者中的上下文是对象上下文和第一行中的 DBContext。 这一切都不是强类型的,因此“更简单”或 Quick & Dirty。不是推荐的方式。

推荐的方法是使用 DbSet 并且根本不处理 SQL 字符串(如果可以避免的话)。

【讨论】:

  • ObjectQuery 与 Linq to Entities 和 EF 6 有什么关系吗?
  • 正如您在定义中看到的:public class ObjectQuery&lt;T&gt; : System.Data.Objects.ObjectQuery, System.Collections.Generic.IEnumerable&lt;T&gt;, System.ComponentModel.IListSource, System.Linq.IOrderedQueryable&lt;T&gt;, System.Linq.IQueryable&lt;T&gt; 它是其中的一部分;它从 EF 1,2,3 开始就在那里。从数据库优先开始,涉及 EDMX 文件并通过检查数据库生成代码。今天我们宁愿使用 Code-First 模型。您手动编写代码并从中创建数据库。或许我们可以将 ObjectQuery 视为 LowLevel-Layer,并且它可能在 EF 内部使用。
猜你喜欢
  • 2010-09-25
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多