• Entity Framework Core 之Querying Data


    Querying Data

    EFCore是使用LINQ语法去数据库中查询数据,查询的声明周期基本如下:

    LINQ查询进程准备一个EFCore的核心提供商来准备进行查询,而这个进程会进行缓存不需要每次查询都执行一遍

    结果通过数据库提供商:

    什么时候执行查询结果动作:

    1. 当有通过循环遍历查询结果的时候,执行查询如for
    2. 当使用如tolist(),toArray(),single(),count等方法的时候执行查询
    3. 将查询结果绑定到UI控件的时候

    Basic Query

    EF Core使用Linq语法从数据库查询数据,Linq允许使用C#来写强类型的查询语句,常用的Linq查询操作如下

     

    1)         加载所有数据:

     

    2)         加载单个实体数据

     

    3)         过滤数据查询:

     

    Loading Related Data

    EF Core允许通过导航属性加载跟实体关联的相关实体信息,有三种加载方式:

    ü  Eager loading(立即加载)表示查询将作为连接数据库时的一部分定义查询

    默认情况下EF Core都会自动预加载导航属性,所以当需要显示加载的时候就可以通过include方法来加载关联实体信息,且可通过多层连接关系加载单个实体

     

    还可通过ThenInclude方法来加载多重关系中的单个实体信息,比如加载所有blogs且通过导航属性加载每篇blog的作者,然后通过作者的关联实体加载作者的图片。

     

    ü  Explicit loading(显式加载)通过DbContext.Entry()显式的加载查询数据,t

     

    查询关联的导航属性实体

     

    ü  Lazy loading(延迟加载)表示相关数据通过访问导航属性时加载

    目前暂不支持

    Tracking&No-Tracking

    实体信息跟踪行为用来跟踪实体信息是否更新改变,当一个实体被标记则它的更改将会被追踪直到调用SaveChanges()

    1)         Tracking queries

    默认情况查询是返回被跟踪的实体类型,意味着可以在调用SaveChanges方法前更改信息。如下示例显示通过查询数据,然后通过查询的实体更新信息,最后保存

     

    2)         No-Tracking queries

    未追踪查询一般是用于只读场景中,因为没有被追踪所以执行迅速

     

    当然也可以通过数据库上下文的查询行为来设置

     

    3)         Tracking and Projections

    Raw SQL Queries(SQL语句查询)

    在关系数据库中允许使用原始SQL语句进行查询

    ü  SQL语句查询只能返回模型中的实体类型

    ü  所有SQL语句查询必须返回数据实体类型的属性

    ü  结果集的列名必须匹配到属性映射到表的名称

    ü  原始SQL查询不能包含关联实体的查询

    1)         Baseic Raw SQL queries:通过fromsql扩展方法进行查询

     

    同样也可以执行存储过程

     

    2)         Pass parameters

    在使用SQL语句时,可以传递参数进去,传参共有两种方式:

    l  通过string.Format函数格式化

     

    l  通过SqlParameter进行参数格式化

     

    3)         Composing with LINQ

    可以将SQL语句查询跟LINQ语句查询结合使用

     

    Asynchronous queries(异步查询)

    异步查询可以在数据库中执行查询时避免阻塞一个线程,非常实用于UI界面等待过程,同样在web程序中也是可以释放线程来执行其他请求。在EFCore中凡是包含ToListAsyn()、ToArrayAsyn()、SingleAsyn()等都是异步,而Linq的where()、orderby()是没有实用异步的

  • 相关阅读:
    ExtAspNet新版本发布v2.0beta4
    自己实现Rich Text Editor
    ExtAspNet应用技巧(五) 动态创建工具栏菜单
    IronPython的Hello World
    关于“跨语言调用”和“CLS(公共语言规范)”的一点体会
    文档,又是文档
    对项目目标的一点想法
    推荐一个WMI的查询分析器
    几个很不错的.NET 相关的FAQ和例子代码的连接
    用IronPython写winform程序
  • 原文地址:https://www.cnblogs.com/Terrece/p/8072153.html
Copyright © 2020-2023  润新知