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()是没有实用异步的

 

转载于:https://www.cnblogs.com/Terrece/p/8072153.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值