方案一:

使用EntityFramework.Extended
优点:

  1. 启下载量是Z.EntityFramework.Extensions的10倍+
  2. 不会过期
    缺点:
    不能批量Insert

方案二:解决批量Insert(update不可用,update必须是true)

 ///在批量插入时,需要加上dbContext.Configuration.AutoDetectChangesEnabled = false;
///解释:http://www.cnblogs.com/linfei721/archive/2013/06/07/3123579.html
 

方案二解释:

http://www.cnblogs.com/hehexiaoxia/p/5707180.html

EF中对实体状会有4种状态:
.Added: 对象为新对象,并且已添加到对象上下文,但尚未调用SaveChange之前都是Added(期间若修改对象属性,对象状态 任为Added, 删除该对象时状态变为Detached) .Modified: 当对象的属性被修改时,如果 AutoDetectChangesEnabled=true,或者调用了DetectChanges(),那么该对象的状态 会被修改为Modified .Deleted: 调用对象集合把对象A Remove后,EF标记该对象为准备从数据库中删除,调用SaveChanges()后数据库删除该记录,
并且EF把该对象标记为Detached .Detached: 对象存在,但尚未被添加到上下文。 .Unchanged: 当直接从数据库加载到上下文,或者调用Attach附加一个对象时,该对象的状态为Unchanged
ValidateOnSaveEnabled:保存前验证对象的属性最大最小长度等,默认为true。
.如果ValidateOnSaveEnabled=true,那么SaveChanges()前不会调用DetectChanges(),
反之如果ValidateOnSaveEnabled=false,那么只有在AutoDetectChangesEnabled=true的情况下,
EF在SaveChanges()前才会调用DetectChanges() AutoDetectChangesEnabled:自动跟踪对象的属性变化,默认为true。
.如果关闭EF自动跟踪,在SaveChanges()前尚未手动调用DetectChanges(),那么保存不会生效。(前提:对象状态为Unchanged)
因为如果AutoDetectChangesEnabled=false,那么EF就不会自动跟踪对象属性的变化,从而导致对象的状态也不会变为Modified,
并且因为AutoDetectChangesEnabled=false,那么EF在SaveChanges() 实际保存到数据库之前不会调用DetectChanges(),
所以最终修改不会生效。
.如果AutoDetectChangesEnabled=true,那么就算不调用DetectChanges(),EF在SaveChanges()时也能生效。 DetectChanges():同步对象与其属性的状态。
.如果对象A的状态为Unchanged,A的属性A1状态为Modified,那么调用DetectChanges()后,A状态变为Modified
.如果AutoDetectChangesEnabled=true,那么对象与其属性的状态会立即同步 AcceptAllChanges():上下文能跟踪状态为Added、Modified、Deleted的所有对象,修改他们的状态为Unchanged。在SaveChanges()失败时不 会调用该方法。 AcceptAllChangesAfterSave:标志SaveChanges()后调用AcceptAllChanges
.EF6.0在SaveChanges()成功后始终会调用AcceptAllChanges(),把Added、Modified、Deleted的对象状态修改为Unchanged DetectChangesBeforeSave:标志在SaveChanges()前,需要调用DetectChanges()同步所有状态
.如果AutoDetectChangesEnabled=false,那么在SaveChanges()前,不会调用DetectChanges()同步所有状态 SaveChanges():
.只有当AutoDetectChangesEnabled=true,ValidateOnSaveEnabled=false的情况下,在保存之前才会调用DetectChanges()
.当保存成功后,始终都会调用AcceptAllChanges() 作者:Asa_Guo
链接:http://www.jianshu.com/p/cff2bb03ac1d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

源代码:

                     // 方法一(EF扩展Z.EntityFrameWork)
dbContext.Configuration.AutoDetectChangesEnabled = false;// 解决批量性能问题
List<EFModel.Machine> machines = new List<Machine>();
for (int i = ; i < bedNoList.Count; i++)
{
EFModel.Machine machine = CreateMachine(bedNoList[i], true);
machines.Add(machine);
}
dbContext.BulkInsert<EFModel.Machine>(machines);
dbContext.BulkSaveChanges(); // 方法二(原生EF)
//dbContext.Configuration.AutoDetectChangesEnabled = false;// 解决批量性能问题
//dbContext.Configuration.ValidateOnSaveEnabled = false;// 解决“对一个或多个实体的验证失败。” //List<EFModel.Machine> machines = new List<Machine>();
//for (int i = 0; i < bedNoList.Count; i++)
//{
// EFModel.Machine machine = CreateMachine(bedNoList[i], true);
// dbContext.Entry<EFModel.Machine>(machine).State = EntityState.Added;
//}
//dbContext.SaveChanges();

【EF】解决EF批量操作,Z.EntityFramework.Extensions 过期方案的更多相关文章

  1. 第九节: EF的性能篇(二) 之 Z.EntityFramework.Extensions程序集解决EF的性能问题

    一. 综述 该模块主要介绍:EF的性能优化插件Z.EntityFramework.Extensions,该插件收费. (一). 简介 1. 相关网站:http://www.zzzprojects.co ...

  2. 自己动手破解Z.EntityFramework.Extensions 4.0.11.0的方法

    因为项目中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免费开源)两个类库,但是Z.EntityFramework.Extensio ...

  3. 破解EFCore扩展Dll --- Z.EntityFramework.Extensions.EFCore

    安装 Z.EntityFramework.Extensions.EFCore Install-Package Z.EntityFramework.Extensions.EFCore -Version ...

  4. 测试EntityFramework,Z.EntityFramework.Extensions,原生语句在不同的查询中的表现。原来池化与非池化设定是有巨大的影响的。

    Insert测试,只测试1000条的情况,多了在实际的项目中应该就要另行处理了. using System; using System.Collections.Generic; using Syste ...

  5. EF批量插入数据(Z.EntityFramework.Extensions)

    EF用原生的插入数据方法DbSet.ADD()和 DbSet.AddRange()都很慢.所以要做大型的批量插入只能另选它法. 1.Nugget 2.代码 using EF6._0Test.EF; u ...

  6. 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题

    一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并 ...

  7. EF 批量增删改 EntityFramework.Extensions

    EntityFramework.Extensions 1.官方网站  http://entityframework-extensions.net/ 2 破解版  Z.EntityFramework.E ...

  8. 解决EF没有生成字段和表说明

    找了很多资料,终于找到一篇真正能解决ef生成字段说明,注释的文章,收藏不了,于是转载 本文章为转载,原文地址 项目中使用了EF框架,使用的是Database-First方式,因为数据库已经存在,所以采 ...

  9. 解决SQL查询总是超时已过期

    解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状:   Microso ...

随机推荐

  1. PHP.49-TP框架商城应用实例-前台1-公共布局、制作首页

    公共布局包括 1.页头.页脚{layout} 正文:{__COMMENT__} 导入:<layout name="layout"> 2.商品导航{nav.html} = ...

  2. 1 多任务fork Unix/Linux/Mac

    # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 1.如下程序,来模拟“唱歌跳舞”这件事情 #-*- coding:utf-8 -*- import time de ...

  3. centos7 的防火墙命令调整了

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.firewall:systemctl start firewalld.service#启动firewalls ...

  4. javaweb(四)——Http协议(请求头,响应头详解)

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  5. hdu1969Pie(根据体积二分,分馅饼)

    Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  6. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  7. (转)GEM -次表面散射的实时近似

    次表面散射(Subsurface Scattering),简称SSS,或3S,是光射入非金属材质后在内部发生散射, 最后射出物体并进入视野中产生的现象, 即光从表面进入物体经过内部散射,然后又通过物体 ...

  8. JavaScript 之 对象/JSON/数组

    对象 简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成. var obj = { p: 'Hello World' }; 上面代码中,大括号就定义了一个对象,它被 ...

  9. CryptoZombies学习笔记——Lesson5

    chapter1:token代币 简而言之,通证就是支持交易的包含一系列规范的函数接口的一个智能合约,发币可以用ERC20标准,但是像僵尸这种非同质化代币,需要用ERC721标准 chapter2:e ...

  10. iOS- UITableViewCell对象是怎么重用的 ?

    iOS设备的内存有限,如果用UITableView显示成千上万条数据, 就需要成千上万个UITableViewCell对象的话, 那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableVie ...