EF批量添加
1.首先,打开工具——NuGet包管理器——管理解决方案的NoGet程序包——搜索Z.EntityFramework.Extensions
点击安装!!!
codefirst定义一个实体,用EF的方法添加数据
static void Main(string[] args)
{
using (ConsoleDBContext context = new ConsoleDBContext())
{
// '''定义要添加数据的条数'''
int customerCount = ; // '''定义一个实体集合'''
List<Users> customers = new List<Users>(); var sw = new Stopwatch();
sw.Start();
// '''想集合中添加数据'''
for (int i = ; i < customerCount; i++)
{
Users customer = new Users()
{
id = Guid.NewGuid(),
name = i + "个"
};
//customers.Add(customer);
context.Users.Add(customer);
}
context.SaveChanges(); //context.BulkInsert(customers);
//context.BulkSaveChanges();
sw.Stop();
Console.Write(sw.Elapsed);
Console.ReadKey();
} }
运行完成:插入10000条数据,用时55秒

接下来我们看看用EF的拓展方法能用多长时间
static void Main(string[] args)
{
using (ConsoleDBContext context = new ConsoleDBContext())
{
// '''定义要添加数据的条数'''
int customerCount = ; // '''定义一个实体集合'''
List<Users> customers = new List<Users>(); var sw = new Stopwatch();
sw.Start();
// '''想集合中添加数据'''
for (int i = ; i < customerCount; i++)
{
Users customer = new Users()
{
id = Guid.NewGuid(),
name = i + "个"
};
customers.Add(customer);
//context.Users.Add(customer);
}
//context.SaveChanges();
context.BulkInsert(customers);
context.BulkSaveChanges();
sw.Stop();
Console.Write(sw.Elapsed);
Console.ReadKey();
}
}
运行完成:插入10000条数据,用时到0.2秒

为什么扩展方法用的时间这么少?
EF自带的方法,会增加与数据库的交互次数,一般地,EF的一个上下文在提交时会打开一个数据连接,然后把转换成的SQL语句一条一条的发到数据库端,然后去提交,下面的图片是我用SQL Server Profiler记录的和数据库交互的操作,这只是一小部分,试想,如果你的数据量达到万级别(更不用说百万,千万数据了),那对数据库的压力是很大的
而扩展方法运行时与数据库的交互是这样的:
批量添加的方法是生成一条SQL语句,和数据库只交互一次。那为什么图片中有多条Insert语句呢,当你使用BulkInsert时,如果数据达到4万之前,那在SQL的解释时,也是很有压力的,有多情况下会超时,当然这与你的数据库服务器有关,但为了性能与安全,将Bulk操作变为分批提交,即将上W的数据进行分解,分用1W数据量提交一次,这样,对数据库的压力就小一些。
不过这种方法好像不能进行多表操作(有主外键的),如果有朋友研究好了,可以给我留言 sun645430@163.com
下面的分析引用风枫疯的文章,在这里注明:https://www.cnblogs.com/xuyufeng/p/6612589.html
EF批量添加的更多相关文章
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
- EF 批量 添加 修改 删除
1批量添加 db.T_Investigator.AddRange(list) 2批量删除 db.T_Investigator.RemoveRange(list) 3批量修改 for 循 ...
- EF批量添加,删除,修改的扩展
在EF各版本中,没有相应批量的添加,删除,修改,在用ORM 处理数据时直有个尴尬.在网上,也接到了很多网友的询问这方面的情况,特此今天把这方面的相关扩展分享一下,(这里只做批量删除的例子,添加和修改的 ...
- EF 批量添加数据
原文:https://www.cnblogs.com/liuruitao/p/10049191.html 原文:https://www.cnblogs.com/yaopengfei/p/7751545 ...
- EF批量添加数据之修改SQL Server执行上限
asp.net core 项目 打开Startup.cs services.AddDbContext<MyContext>( options => { options.UseSqlS ...
- Entity Framework入门教程(12)--- EF进行批量添加/删除
EF6添加了批量添加/删除实体集合的方法,我们可以使用DbSet.AddRange()方法将实体集合添加到上下文,同时实体集合中的每一个实体的状态都标记为Added,在执行SaveChange()方法 ...
- EF大数据批量添加性能问题(续)
昨天在园子里发了一篇如题的文章EF大数据批量添加性能问题,就引来一大堆的吐槽,我认为知识就应该这样分享出来,不然总以为自己很了不起:再说说昨天那篇文章,很多自认为很牛逼的人都评论说把SaveChang ...
- EF大数据批量添加性能问题
前几天做一个批量发消息的功能,因为要向消息表中批量写入数据,用的EF框架的插入方法:不用不知道,一用吓一跳:就10000条数据就耗时好几分钟,对应追求用户体验的我来说这是极不能容忍的,后来改为拼接SQ ...
- ASP.NET MVC用存储过程批量添加修改数据
用Entity Framework 进行数据库交互,在代码里直接用lamda表达式和linq对数据库操作,中间为程序员省去了数据库访问的代码时间,程序员直接可以专注业务逻辑层的编写.但是对于比较复杂的 ...
随机推荐
- malloc&&fread
const char *wavePath = [_filePath UTF8String]; FILE *fh; int16_t * adbuf; fh = fopen(wavePath, " ...
- java中接口有什么用
1.通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类. 2.通过接口可以指明多个类需要实现的方法. 3.通过接口可以了解对象的交互界面,而不需了解对象所对应的类. 另:Java是单继承, ...
- Oracle数据库中文乱码问题解决
1.查看服务器端编码select userenv('language') from dual;我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK 2.执行语句 select * f ...
- MyBatis 通过包含的jdbcType类型
BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED TINYINT REAL V ...
- k8s集群搭建之二:etcd集群的搭建
一 介绍 Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现. 简单:支持 curl 方式的用户 API (HTTP+JSON) 安全:可选 SSL 客户端证书认证 快速 ...
- Magento站点优化方案
Magento 是一个开源电子商务系统,尤其以扩展性高著称,但是很高的扩展性往往是牺牲了速度为代价的,虽然现在magento为速度提升做了很多工作,但是还是没能达到人们对速度的要求.既然如此还是很自然 ...
- security安全框架 配置
<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://w ...
- Flex布局(二)
接上一篇,说一下flex布局的实例,转自阮一峰老师的博客
- webpack 添加eslint代码审查
1). 添加包 npm install eslint --save-dev npm install eslint-loader --save-dev npm install eslint-plugin ...
- delphi 文件分割与合并
流的使用分割与合并文件的函数 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...