EF+Lambda查询性能测试

测试语句如下:

[TestMethod]
        public void TestFirst()
        {
            using (var db = new EntityContext())
            {
                db.Database.CreateIfNotExists();

                int i = 0;
                while (i < N)
                {
                    var role = new Role();
                    role.Name = "Administrator";
                    db.Role_Table.Add(role);

                    var user = new User();
                    user.Name = "Apollo";
                    user.Roles = new List<Role> { role };

                    db.User_Table.Add(user);

                    i++;
                }

                Assert.IsTrue(db.SaveChanges() > 0);

                //DbContext中对IQueryable<T>接口的实现,赋予其调用诸如Where、Select等对数据查询计算的功能
                //AsParallel方法的作用为标识成并行处理
                var users = db.User_Table.Where(u => u.Name == "Apollo").Select(c => c).AsParallel();
                db.User_Table.RemoveRange(users);

                var roles = db.Role_Table.Where(r => r.Name == "Administrator").Select(c => c).AsParallel();
                db.Role_Table.RemoveRange(roles);

                Assert.IsTrue(db.SaveChanges() > 0);
                Assert.IsTrue(db.User_Table.Count().Equals(0) && (db.Role_Table.Count().Equals(0)));

            }
        }

运行测试,当N分别等于10、100、1000时,完整测试通过所需时间分别为2s,3s,15s。

当N=2000时,单纯Insert部分用时平均27s,而Delete部分只需4s。

时间: 2024-10-31 04:37:38

EF+Lambda查询性能测试的相关文章

ASP.NET EF(LINQ/Lambda查询)

EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动导入MVC程序集,因为默认.NET环境(GAC)中没有这个程序集 1 create database MyFirstEF 2 on primary 3 ( 4 name='MyFirstEF.mdf', 5 --修改为自己电脑上SQL DB路径 6 filename='E:\ProgramMSSQL

EF删除,查询,Linq查询,Lambda查询,修改链接字符串

(1)//删除操作 public bool delete() { try { a_context = new AEntities(); b1 = new Table_1(); //删除只需要写主键就行了 b1.id = 3; a_context.Entry<Table_1>(b1).State = EntityState.Deleted; a_context.SaveChanges(); return true; } catch (Exception) { return false; } }

解决 EF 分层查询的一个性能问题

前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了套用了我现在的架构 EF6.0+autofac+三层架构,上层的asp.net没有变.改完后发现交班页面打开巨慢. 跟踪EF生成的sql语句   发现生成的sql 有问题,查找的全表,而全表有近10万条的数据. 继续跟踪数据库的耗时查询 发现确实是这条语句占时间 为什么会这样呢,我在查询里做条件搜索

EF直接查询一张子表的注意事项

项目用到的一个查询,看着再简单不过的查询,没想到居然栽跟头了. 有两张表,一张主表,一张子表[1→多] 在这里我主要是想对子表操作,之所以加主表,是因为在添加子表数据的时候,可以只用一个主表的对象,然后用上下文添加一次,EF自动开存储过程,自动添加关联子表数据.如果大家有什么好的办法让子表一次添加一千多条数据,请指教.[因为我也不太想这样添加数据] 问题就出现在我查询这个子表数据的时候 我的查询语句是这样写的 然后奇迹出现了,按照我的条件约束,查询出来的数据应该只有一两条数据,但是,查询出的结果

讨论过后而引发对EF 6.x和EF Core查询缓存的思考

前言 最近将RabbitMQ正式封装引入到.NET Core 2.0项目当中,之前从未接触过这个高大上的东东跟着老大学习中,其中收获不少,本打算再看看RabbitMQ有时间写写,回来后和何镇汐大哥探讨了一点关于EF和EF Core的内容,于是乎本文就出来了.EF 6.x和EF Core中的查询缓存想必大家都有耳闻或者了解,从数据库中查询出来的实体会形成快照在内存中Copy一份且被上下文跟踪,接下来我们要讲的内容就是这个,我们来看看. EF 6.x和EF Core查询缓存思考 首先我利用EF Co

ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置和初始化数据库,以及如何创建迁移代码和应用迁移代码.本章节我们就学习如何使用 EF 框架来查询数据库,至于添加和修改,后面的章节中我们会慢慢学习到 添加测试数据 我们首先使用 SQLite Studio 添加三条数据 ID Name 1 李白 2 杜甫 3 白居易 使用 SQLite Studio

动态构建Lambda表达式实现EF动态查询

在使用Entity Framework做数据查询的时候,查询条件往往不是固定的,需要动态查询.可以通过动态构建Lamda表达式来实现动态查询. Lamda表达式 使用Lamda表达式可以很方便的按条件过滤数据.Entity Framework也是将Lamda表达式转换成对应的SQL语句执行. 比如下列代码,输出年龄大于1的人的名字: namespace ConsoleApp { public class Person { public string Name { get; set; } publ

EF Lambda 多表查询

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc; namespace MvcForLamadaToTableJion.Controllers{ public class HomeController : Controller { public ActionResult Index() { LamadaJoinEvent(); return V

EF中查询的本质

UI层我直接用了窗体程序. 好了 不罗嗦 直接上代码…… private void button1_Click(object sender, EventArgs e) { //1.0创建EF上下文容器 phonebookEntities db = new phonebookEntities(); //2.0 查询GropuInfo表中的 GroupId>10的所有数据 var sql = db.GroupInfo.Where(w => w.GroupId > 10); //3.0将sql