【EF】解决EF批量操作,Z.EntityFramework.Extensions 过期方案
方案一:
使用EntityFramework.Extended
优点:
- 启下载量是Z.EntityFramework.Extensions的10倍+
- 不会过期
缺点:
不能批量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 过期方案的更多相关文章
- 第九节: EF的性能篇(二) 之 Z.EntityFramework.Extensions程序集解决EF的性能问题
一. 综述 该模块主要介绍:EF的性能优化插件Z.EntityFramework.Extensions,该插件收费. (一). 简介 1. 相关网站:http://www.zzzprojects.co ...
- 自己动手破解Z.EntityFramework.Extensions 4.0.11.0的方法
因为项目中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免费开源)两个类库,但是Z.EntityFramework.Extensio ...
- 破解EFCore扩展Dll --- Z.EntityFramework.Extensions.EFCore
安装 Z.EntityFramework.Extensions.EFCore Install-Package Z.EntityFramework.Extensions.EFCore -Version ...
- 测试EntityFramework,Z.EntityFramework.Extensions,原生语句在不同的查询中的表现。原来池化与非池化设定是有巨大的影响的。
Insert测试,只测试1000条的情况,多了在实际的项目中应该就要另行处理了. using System; using System.Collections.Generic; using Syste ...
- EF批量插入数据(Z.EntityFramework.Extensions)
EF用原生的插入数据方法DbSet.ADD()和 DbSet.AddRange()都很慢.所以要做大型的批量插入只能另选它法. 1.Nugget 2.代码 using EF6._0Test.EF; u ...
- 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题
一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并 ...
- EF 批量增删改 EntityFramework.Extensions
EntityFramework.Extensions 1.官方网站 http://entityframework-extensions.net/ 2 破解版 Z.EntityFramework.E ...
- 解决EF没有生成字段和表说明
找了很多资料,终于找到一篇真正能解决ef生成字段说明,注释的文章,收藏不了,于是转载 本文章为转载,原文地址 项目中使用了EF框架,使用的是Database-First方式,因为数据库已经存在,所以采 ...
- 解决SQL查询总是超时已过期
解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状: Microso ...
随机推荐
- Struts2获取Servlet的api的两种方式,解决ParameterAware过时的问题
servlet API通过ActionContext进行获取 Struts2对HttpServletRequest,HttpSession和ServletContext进行了封装,构造了3个Map对象 ...
- 成都Uber优步司机奖励政策(2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 基于套接字通信的简单练习(FTP)
本项目基于c/s架构开发(采用套接字通信,使用TCP协议) FTP-Socket"""__author:rianley cheng""" 功 ...
- VIO概述 On-Manifold Preintegration for Real-Time Visual--Inertial Odometry
目前的研究方向可以总结为在滤波算法中实现高精度,在优化算法中追求实时性.当加入IMU后,研究方向分为松耦合和紧耦合,松耦合分别单独计算出IMU测量得到的状态和视觉里程计得到的状态然后融合,紧耦合则将I ...
- mongdb数据迁移导出与导入
导出: mongoexport --host localhost --port --username un1 --password pwd1 --db db1 --collection col1 -- ...
- NNLearning阶段性总结01
神经网络最基本的元素与计算流程: 基本的组网原则: 神经网络监督学习的基本步骤: 初始化权值系数 提取一个样本输入NN,比较网络输出与正确输出的误差 调整权值系数,以减少上面误差——调整的方法对应不同 ...
- 了解Python控制流语句——if语句
控制流 截止到现在,在我们所看过的程序中,总是有一系列语句从上到下精确排列,并交由 Python 忠实地执行.如果你想改变这一工作流程,应该怎么做?就像这样的情况:你需要程序作出一些决定,并依据不同的 ...
- Python全栈 项目(电子词典、协程、pdb调试)
后面我就不截图了 大家还是看原文吧 https://yq.aliyun.com/articles/629534 . ................. ...
- 181. Flip Bits【LintCode, by java】
Description Determine the number of bits required to flip if you want to convert integer n to intege ...
- spark操作数据库的几种方法
一.使用jdbcRDD的接口: SparkConf conf = new SparkConf(); conf.setAppName("Simple Application").se ...