您的位置:首页 > 其它

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

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



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再执行的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: