1、分页的时候,尽量在数据库里面去分页.

            //在数据库中分页
            var product = context.Set<Product>().OrderBy(c=>c.Id).Skip(0).Take(2).ToList();
            //先把数据从数据库中查出来,然后才分页
            var products = context.Set<Product>().ToList().Skip(0).Take(2);

2、尽量禁用延迟加载,尽量使用预加载和显式加载查询

默认生成的代码,是启用了延迟加载的,这样会造成多次往返数据库查询的。

如果在查询的结果中使用导航属性的时候使用预加载

3、AsNoTracking作用

无跟踪查询,也就是说查询出来的对象不能直接做修改。所以,我们在做数据集合查询显示,而又不需要对集合修改并更新到数据库的时候,一定不要忘记加上AsNoTracking。

如果查询过程做了select映射就不需要加AsNoTracking。如:db.Students.Where(t=>t.Name.Contains("张三")).select(t=>new (t.Name,t.Age)).ToList();

            //不考虑删除和修改
            var product2 = context.Set<Product>().AsNoTracking().ToList();
            //select映射
            var product3 = context.Set<Product>().Select(c => new { c.Id, c.Name, c.Description }).ToList();

 4、Any的用法

确定集合中是否有元素满足某一条件

            //any的用法
            var result = context.Set<Product>().Any(c => c.Name.Contains(""));

            var result2 = context.Set<Product>().Where(c => c.Name.Contains("")).Count() > 0;

不管是直接属性还是导航属性我们都用any来判断是否存在是最稳当的

5、避免从ToList()后的结果中查找

写完查询后如果调用ToList()或者FirstOrDefault(),再从结果中查找元素,此时数据会全部加载到内存中。