zoukankan      html  css  js  c++  java
  • 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再执行的

  • 相关阅读:
    操作系统复习
    你不知道的JS(2)深入了解闭包
    剑指offer(66)机器人的运动范围
    剑指offer(65)矩阵中的路径
    剑指offer(64)滑动窗口中的最大值
    剑指offer(63)数据流中的中位数
    剑指offer(62)二叉搜索树的第K个节点
    剑指offer(61)序列化二叉树
    剑指offer(60)把二叉树打印成多行
    让 Laravel API 永远返回 JSON 格式响应!
  • 原文地址:https://www.cnblogs.com/xuwanghu/p/4722527.html
Copyright © 2011-2022 走看看