LINQ to Entities查询

在EF中,查询对象模型有很多种方式:

1)通过Object Services执行LINQ to Entities。

2)通过Object Services执行查询构建方法(查询构建方法可以用来构建Entity SQL)。

3)通过Object Services执行Entity SQL。

4)通过Entity Client层执行Entity SQL。

第一种是最为广泛使用的方法。

Object Services最重要的类是ObjectContext,它提供了执行LINQ to Entities查询的唯一入口,Visual Studio设计器除了产生实体类外,还产生了一个继承自ObjectContext的类,这个类针对每一个实体对象暴露出一个实体集属性,实体集用ObjectSet<T>类型来描述。例如下面是自动生成的ObjectContext,其中含有Order实体集的访问属性: 

  public partial class OrderITEntities : ObjectContext
  {
    public ObjectSet<Order> Orders
    {
      get
      {
        return _orders ?? (_orders = CreateObjectSet<Order>("Orders"));
      }
    }
    private ObjectSet<Order> _orders;
  }

设计器产生的ObjectContext类给我们提供了访问实体集的属性和一些常用的方法,它是EF操作实体对象的推荐方式。


1、LINQ to Entities查询原理

ObjectSet<T>实现了IQueryable<T>,这个接口的成员引用一个实现了IQueryProvider接口的对象,而Entity Framework提供了自身的IQueryProvider,这使得EF具有了分析查询并产生SQL语句的能力。LINQ to Entities查询原理如图:


2、捕获产生的SQL

Object Service提供了ToTraceString方法,用来查看产生的SQL语句:

var result = ctx.Orders.Where(o => o.Date.Year == DateTime.Now.Year);
var sql = (result as ObjectQuery).ToTraceString();


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值