ado.net entity framework使用不同的方法查询数据的不同性能
第一部分:重复查询单个实体
第一种:Linq To Entitiess
代码如下:
static void Main(string[] args)
{
DateTime time1;
DateTime time2;
time1 = DateTime.Now;
NorthwindEntities context = new NorthwindEntities();
for (int i = 0; i < 1000; i++)
{
var data = (from c in context.Customers where c.CustomerID == "ALFKI" select c).FirstOrDefault();
string addr = data.Address;
}
time2 = DateTime.Now;
Console.WriteLine((time2-time1).ToString());
}
查询使用时间为6.2秒左右
第二种:使用Entity SQL
static void Main(string[] args)
{
DateTime time1;
DateTime time2;
time1 = DateTime.Now;
NorthwindEntities context = new NorthwindEntities();
for (int i = 0; i < 1000; i++)
{
var data = context.Customers.Where("it.CustomerID=@Id", new System.Data.Objects.ObjectParameter("Id", "ALFKI")).FirstOrDefault();
string addr = data.Address;
}
time2 = DateTime.Now;
Console.WriteLine((time2-time1).ToString());
}
查询使用时间为6.2秒左右
第三种:使用EntityKey 来查询
static void Main(string[] args)
{
DateTime time1;
DateTime time2;
time1 = DateTime.Now;
NorthwindEntities context = new NorthwindEntities();
for (int i = 0; i < 1000; i++)
{
var data = context.GetObjectByKey(new System.Data.EntityKey("NorthwindEntities.Customers", "CustomerID", "ALFKI")) as Customers;
string addr = data.Address;
}
time2 = DateTime.Now;
Console.WriteLine((time2-time1).ToString());
}
查询使用时间为1秒,没错是一秒
总结:
前两种方法查询所使用的时间都差不多为6.2秒,时间比较长,但是使用第三种方法查询数据仅仅使用了1秒,为什么会相差那么多,区别在于前两种方法每次查询都要从数据库中查找,1000次查询每次的查询时间都一样,但是第三种方法只有第一次是从数据库中查数据,后面的999次都是在context通过主键直接取数据,速度当然会快很多啦,EF4.0之前的实体当含有外键引用时是自动生成对象引用的,而EF4.0现在多了一个外键ID,这样我们可以很方便的通过外键来查询数据
第二部分:查询不同是实体
第一种:Linq To Entitiess
static void Main(string[] args)
{
DateTime time1;
DateTime time2;
NorthwindEntities context = new NorthwindEntities();
//先将Customers所有的主键查询出来
List<string> keys = context.Customers.Select(c => c.CustomerID).Distinct().ToList();
//和上面的context以作区别
NorthwindEntities context_ = new NorthwindEntities();
time1 = DateTime.Now;
foreach (var key in keys)
{
var data = context_.Customers.Where(c => c.CustomerID == key).FirstOrDefault();
string addr = data.Address;
}
time2 = DateTime.Now;
Console.WriteLine((time2 - time1).ToString());
}
查询使用时间0.68秒左右
第二种:使用Entity SQL
static void Main(string[] args)
{
DateTime time1;
DateTime time2;
NorthwindEntities context = new NorthwindEntities();
//先将Customers所有的主键查询出来
List<string> keys = context.Customers.Select(c => c.CustomerID).Distinct().ToList();
//和上面的context以作区别
NorthwindEntities context_ = new NorthwindEntities();
time1 = DateTime.Now;
foreach (var key in keys)
{
var data = context_.Customers.Where("it.CustomerID=@Id", new System.Data.Objects.ObjectParameter("Id", key)).FirstOrDefault();
string addr = data.Address;
}
time2 = DateTime.Now;
Console.WriteLine((time2 - time1).ToString());
}
查询使用时间0.5秒左右
第三种:使用EntityKey 来查询
static void Main(string[] args)
{
DateTime time1;
DateTime time2;
NorthwindEntities context = new NorthwindEntities();
//先将Customers所有的主键查询出来
List<string> keys = context.Customers.Select(c => c.CustomerID).Distinct().ToList();
//和上面的context以作区别
NorthwindEntities context_ = new NorthwindEntities();
time1 = DateTime.Now;
foreach (var key in keys)
{
var data = context_.GetObjectByKey(new System.Data.EntityKey("NorthwindEntities.Customers", "CustomerID", key)) as Customers;
string addr = data.Address;
}
time2 = DateTime.Now;
Console.WriteLine((time2 - time1).ToString());
}
查询时间为0.18秒左右
总结:
通过比较第三种方法仍然比前两种来的快,查询效率更高
使用EntityKey来查询数据比其他两种方法来的更快,而且不是快一点点,而是相差有好几倍,这里的比较并没有使用存储过程来比较查询,但是从这里我们可以看出,在平常的应用中如果知道实体的主键尽量用主键来查询
分享到:
相关推荐
### ADO.NET Entity Framework 教程知识点概览 #### 一、Entity Framework 概述 - **背景**:Entity Framework (EF) 是 Microsoft 推出的一款 ORM (Object Relational Mapping) 工具,旨在简化数据访问层的开发,...
这个“ado.net entity framework extension”指的是对原生Entity Framework的扩展,以增强其功能和性能。 1. **Entity Framework基础**:Entity Framework的核心概念包括实体(Entities)、实体数据模型(EDM)、上...
在ADO.NET Entity Framework中,存储过程的使用可以增加应用程序的灵活性和性能。以下是如何在Entity Framework中使用存储过程进行查询、插入、更新和删除操作的详细步骤: 1. **创建数据库**: 首先,我们需要...
本文将深入探讨三种常见的.NET框架下的数据库访问技术:ADO.NET SQL、LINQ to SQL以及ADO.NET Entity Framework(EF),并重点分析它们在数据库连接性能上的差异,特别是在插入和读取操作,包括模糊检索方面的表现。...
ADO.NET Entity Framework(简称EF)是微软提供的一款强大的数据访问框架,它使得开发者能够以对象关系映射(ORM)的方式操作数据库,极大地简化了数据库编程。在这个"ADO.NET Entity Framework使用封装示范代码"中...
总的来说,这个压缩包提供的代码可以帮助开发者在使用ADO.NET Entity Framework时,轻松实现数据库查询的分页功能,提高应用程序的性能和用户体验。通过使用这个分页类,开发者可以避免手动编写复杂的SQL分页查询,...
ADO.NET Entity Framework 4.1 是微软开发的一个强大的对象关系映射(ORM)框架,它构建在 ADO.NET 之上,旨在简化数据库应用程序的开发。这个框架允许开发人员使用面向对象的编程方式来操作数据库,而无需直接编写...
实体框架 EntityFramework 使用概念层、映射层和逻辑层将逻辑数据库结构抽象化。 什么是 ADO.NET Entity Framework? ADO.NET Entity Framework 是一种实体框架,它提供了一种新的数据访问方式,允许开发人员使用...
ADO.NET Entity Framework概述PPT讲解,已经学习,好东西、分享
#### 标题理解:“ADO.NET Entityframework 書籍” 本书籍主要介绍了ADO.NET与Entity Framework的核心概念、技术细节及其在现代软件开发中的应用。其中特别强调了DbContext作为Entity Framework的一个关键组件,在...
### ADO.NET Entity Framework 开发实践 #### 一、ADO.NET Entity Framework 概览 **ADO.NET Entity Framework**(简称 EF)是微软提供的一种用于 .NET 应用程序的数据访问技术,它支持开发者通过面向对象的方式来...
最近ado.net entity framework 电子书,入门学习的最佳书籍
ADO.NET EntityFramework入门教程,分别讲解Storage Provider ,Mapping Layer ,Object Services,LINQ to Entities 四层如何设计使用
ADO.NET Entity Framework Domain-Driven
Ado.Net Entity Framework 和 WCF(Windows Communication Foundation)是.NET框架中的两个重要组件,它们分别在数据访问和分布式服务方面发挥着关键作用。本Demo旨在展示如何将这两者结合使用,构建一个完整的应用...
ADO.NET Entity Framework是一个强大的数据访问框架,它允许开发者以对象关系映射(ORM)的方式处理数据库,从而减少了对SQL语句的直接依赖。这个实例涵盖了Entity Framework与SQL Server的集成,帮助我们理解如何...
ADO.NET Entity Framework 是微软开发的一款强大的ORM(对象关系映射)框架,用于简化数据库操作,使得开发者无需直接编写SQL语句即可与数据库进行交互。它将数据库中的表、视图等对象映射为C#或VB.NET中的实体类,...
### ADO.NET Entity Framework 进阶知识点解析 #### 一、ADO.NET Entity Framework 概述 ADO.NET Entity Framework(简称 EF)是微软提供的一种对象关系映射(Object-Relational Mapping,ORM)框架,它允许开发者...
Microsoft ADO.NET Entity Framework Step by Step