Entity Framework中实现查询的几种方法

在介绍几种方法前,献上一张图,希望图的作者不要追究我的盗图之过。本文的内容是我自学时的笔记,自学的内容来自网络。手打的代码,切不可直接复制过去用,会有好多错别字什么的。

  • Entity SQL   

  类似于SQL语句,

    SELECT VALUE c FROM Entities.Contacts

 VALUE关键字表示返回的是一个对象,原文是return an object,not a row. Used when only a single item is selected.

   Entities.Contacts就是一个EDM(Entity Data Model)

  • LINQ to Entities

  LINQ to Entities 可以看做是LINQ to Object的一个变种,通过LINQ来查询ADO.NET来查询EDM,在底层使用Object Services来完成其功能。

    Object Services:是一组用于查询实体数据模型的类,它可以将这些查询结果转化为强类型的CLR对象。Object Services也可以执行EntitySQL命令。

  通过EntitySQK=l调用Object Services示例

      var queryString="SELECT VALUE c FROM Entitis.Contacts AS c WHERE c.Name='XV'";

       ObjectQuery<Contact> contacts=context.CreateQuery<Contact>(queryString);

  • Entity Client

   从本文开头的图中,很容易就可以知道不管是使用EntitySQL还是LINQ to Entities,最后都要以来EntityClient来完成其工作。当然,也可以直接使用EntityClient,

   通过 EntitySQL,性能较高,但要手动跟踪数据的修改情况。所以,只有当1.需要较高的性能2.以只读方式访问数据时,才考虑使用直接用EntitySQL调用ENtityClient。

   Entity Client不会返回实体对象,它返回的是一组对象模型,如EntityConnection等,类似于ADO.NET提供的对象模型。

  • 直接执行SQL语句

  当底层数据库是关系数据库时,EF可以直接向其发送SQL命令。

  • 使用“扩展的”查询方法

  在实际的开发中,也经常使用扩展的方法+lambda表达式以级联的方式完成查询工作,如:

  var contacts=context.Contacts.Where(c=> c.Name=="XV").OrderBy((foo)=>foo.FirstName);

  事实上,LINQ to Entities查询最终也是转化为扩展方法+lambdas再执行的

原文地址:https://www.cnblogs.com/xuwanghu/p/4722527.html