• Asp.net mvc基础(十五)EF原理及SQL监控


    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类的属性需要和查询的结果的列名一致。

  • 相关阅读:
    Ios插件开发
    React-Native学习指南
    APP测试基本流程
    iOS开发-由浅至深学习block
    你真的会用UITableView嘛
    iOS系统右滑返回全局控制方案
    优化UITableViewCell高度计算的那些事
    UITableViewCell高度自适应探索--AutoLayout结合Frame
    UITableView优化技巧
    页面间跳转的性能优化(一)
  • 原文地址:https://www.cnblogs.com/fengjiqiang123/p/14933184.html
Copyright © 2020-2023  润新知