EF会自动把Where()、OrderBy()、Select()等这些编译成"表达式树",然后回把表达式树翻译成SQL语句,因此不是"把数据都取到内存中,然后使用集合的方法进行数据过滤",因此性能不会滴。但是如果这个操作不能被翻译成SQL语句,或者报错,或者被放到内存中操作,性能就会非常低。

一、SQL监控

EF进行操作数据库的本质还是通过ADO.NET进行操作数据库。

可以通过DbContext.Database.Log=(sql)=>{ }进行监控EF编译成sql语句的动态。

二、EF延迟查询

1.EF的查询时延迟执行,只有遍历结果集的时候才执行select查询。

2.ToList()或ToArray()时查询就会立即执行

总结:

(1).在延迟查询中,EF会尽可能将多个对数据操作的语句通过编译成表达式树翻译成sql语句进行查询。

比如:

var person_list=list.where(s=>s.Id>2);

var first_person = person_list.First();

不会立即执行,在遍历数据的时候才会执行。

比如:

var person_list=list.where(s=>s.Id>2).ToList();

var first_person = person_list.First();

第一句会立即查询数据,然后将查询到的数据拿到内存中执行第二局进行过滤数据。

(2).使用IEnumerable<T>为变量类型同样会将数据放到内存中,然后在内存中进行后续处理数据,所以必须写成IQueryable<T>

3.每次开始执行的时候,都会执行__MigrationHistory等这些SQL语句,这些语句时DBMigration用的,就是由EF帮我们建数据库。因此可以通过Database.SetInitializer<xxxDBContext>(null);来禁用

一半建议放到XXXDbContext构造函数中。而Database时System.Data.Entity下的类,不是DbContext的Database属性。如果写道DbContext中,最好用上全名,防止出错。

三、执行原始SQL

1.执行非查询语句

调用DbContext的Database属性的ExecuteSqlCommand方法,通过占位符的方式传递参数。

2.执行查询语句

调用DbContext的Database属性的SqlQuery<T>()方法。其中T类的属性需要和查询的结果的列名一致。

Asp.net mvc基础(十五)EF原理及SQL监控的更多相关文章

  1. ASP.NET MVC基础学习

    ASP.NET MVC基础学习 传统的MVC概念 模型:组类,描述了要处理的数据以及修改和操作数据的业务规则 视图:定义应用程序用户界面的显示方式 控制器:一组类,用来处理来自用户,整个应用程序流以及 ...

  2. ASP.NET MVC Model绑定(五)

    ASP.NET MVC Model绑定(五) 前言 前面的篇幅对于IValueProvider的获取位置和所处的生成过程做了讲解,本篇将会对IValueProvider的使用做个基础的示例讲解,读完本 ...

  3. ASP.NET MVC Model验证(五)

    ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...

  4. ASP.NET MVC Model元数据(五)

    ASP.NET MVC Model元数据(五) 前言 在上一篇中我们描述了应用于Model上面的各种用于显示控制的特性类,在本篇中将详细的介绍这些特性类的应用,虽然它们跟Model元数据的直接关系并不 ...

  5. Bootstrap<基础十五> 输入框组

    Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...

  6. Contoso 大学 - 1 - 为 ASP.NET MVC 应用程序创建 EF 数据模型

    原文 Contoso 大学 - 1 - 为 ASP.NET MVC 应用程序创建 EF 数据模型 原文地址:Creating an Entity Framework Data Model for an ...

  7. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

  8. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  9. ASP.NET MVC学习(五)之MVC原理解析

    ASP.NET MVC 请求生命周期 生命周期步骤概览 当我们对ASP.NET MVC网站发出一个请求的时候,会发生5个主要步骤: 步骤1:创建RouteTable 当ASP.NET应用程序第一次启动 ...

  10. ASP.NET MVC 基础

    ASP.NET MVC oo1 Mvc准备工作课程安排:ORM->AspNet MVC开发环境:VS2012/VS2013SqlServer2008/2005主讲Asp.Net Mvc4 Raz ...

随机推荐

  1. 设置npm、yarn和pnpm的国内镜像地址和yarn命令相关问题

    1.npm 全局设置: 输入如下命令查看镜像地址: npm config get registry 输入如下命令设置镜像地址为淘宝: // 推荐地址 npm config set registry h ...

  2. LangChain基础篇 (04)

    LangChain 核心模块:Data Conneciton - Document Loaders 使用文档加载器从源中加载数据作为文档.一个文档是一段文字和相关的元数据. 如,有用于加载简单 .tx ...

  3. centos系统chrony时间同步

    centos系统chrony时间同步 概要 chrony 是网络时间协议(Network Time Protocol )的通用实现.它不但可以提供保持系统时间与 NTP 时钟服务器同步的服务,还能作为 ...

  4. flutter-超出部分隐藏

    第一种写法 1 ConstrainedBox( 2 constraints: BoxConstraints( 3 maxHeight: 100 4 ), 5 child: Stack( 6 overf ...

  5. 2025AI应用元年,DeepSeek让领域小模型训练成本急剧下降!

    关注公众号回复1 获取一线.总监.高管<管理秘籍> 模型训练俗称炼丹,而炼丹是修士特权,这就显得模型训练离普通人很远了. 虽然是笑谈,但如果对其中情况不太了解确实也会因为其背后深厚.复杂的 ...

  6. MOS管的寄生电容

    我们经常看到,在电源电路中,功率MOS管的G极经常会串联一个小电阻,几欧姆到几十欧姆不等,那么这个电阻用什么作用呢? 这个电阻的作用有2个作用:限制G极电流,抑制振荡. 限制G极电流MOS管是由电压驱 ...

  7. C51基础知识总览

  8. Kali Linux(202104)重置root账户密码

    1.前言 如果忘记了Kali Linux系统的登录密码,最关键的需求就是重置root用户的登录密码, 之后使用root账户可以修改其他账户的密码. 因此, 本文就介绍一下在不知道root用户登录密码的 ...

  9. 李沐动手学深度学习V2-chapter_linear-networks

    李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...

  10. 如何编写Kubernetes的YAML(一)

    什么是API对象 作为一个集群操作系统,Kubernetes 归纳总结了 Google 多年的经验,在理论层面抽象出了很多个概念,用来描述系统的管理运维工作,这些概念就叫做"API 对象&q ...