using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using TH.Com.General;
using TH.Common; public partial class EFUpdate : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
var sp = new Stopwatch();
sp.Start(); var isSqlBulkCopy = true;
var list = new List<Article>();
using (var da = new THCommon())
{
Random rand = new Random(); for (var i = ; i < ; i++)
{
var art = new Article();
art.ID = Guid.NewGuid();
art.Area = Convert.ToDecimal(rand.Next() / 100.0);
art.CreateBy = "sdm";
art.CreateTime = DateTime.Now.AddMinutes(i);
art.Height = rand.Next();
art.Name = "Name" + i;
art.Note = "This is Note" + i;
art.Number = i;
art.Price = Convert.ToDecimal(rand.Next() / 100.0);
art.Weight = Convert.ToDecimal(rand.Next() / 100.0); list.Add(art); }
sp.Stop();
Debug.Print("Articles.Add = " + sp.ElapsedMilliseconds);
sp.Restart(); if (isSqlBulkCopy)
{
SaveList(da, list);
}
else
{
da.Articles.AddRange(list);
da.SaveChanges();
} sp.Stop();
Debug.Print("SaveChanges = " + sp.ElapsedMilliseconds);
sp.Restart();
}
} private void SaveList(DbContext db, List<Article> list)
{
//保存上传记录
var tableToInsert = Tools.ListToDataTable(list);
string cnstr = db.Database.Connection.ConnectionString;
using (var sqlBC = new SqlBulkCopy(cnstr))
{
sqlBC.DestinationTableName = "Art.Article";
sqlBC.BatchSize = ;
sqlBC.BulkCopyTimeout = ;
sqlBC.WriteToServer(tableToInsert);
}
} //更新测试
protected void Button2_Click(object sender, EventArgs e)
{
Debug.Print("测试数据更新方法速度比较");
Debug.Print("1.ef直接更新"); //EFUpdate1(10000);
//EFUpdate2(10000);
SqlDataAdapterUpdate();
} private void EFUpdate1(int count)
{
var sp = new Stopwatch();
sp.Start();
using (var da = new THCommon())
{
var list = da.Articles.Take().ToList(); sp.Stop();
Debug.Print("ToList = " + sp.ElapsedMilliseconds);
sp.Restart(); list.ForEach(t => t.Area = t.Height * t.Price);
sp.Stop();
Debug.Print("ForEach = " + sp.ElapsedMilliseconds);
sp.Restart(); da.SaveChanges(); sp.Stop();
Debug.Print("SaveChanges = " + sp.ElapsedMilliseconds);
sp.Restart();
}
} private void EFUpdate2(int count)
{
var sp = new Stopwatch();
sp.Start();
using (var da = new THCommon())
{
var list = da.Articles.Take().ToList(); var sql = "update art.article set Area = Height * Price where createtime<'2017-01-07 10:13:54.870' "; da.Database.ExecuteSqlCommand(sql); sp.Stop();
Debug.Print("ExecuteSqlCommand = " + sp.ElapsedMilliseconds);
sp.Restart();
}
} private void SqlDataAdapterUpdate()
{
var sp = new Stopwatch();
sp.Start();
using (var da = new THCommon())
{
var conn = (SqlConnection)da.Database.Connection; //设置select查询命令,SqlCommandBuilder要求至少有select命令
var selectCMD = new SqlCommand("select * from art.article where createtime<'2017-01-07 10:13:54.870'", conn);
var dt = new DataTable();
var sda = new SqlDataAdapter(selectCMD); //上面的语句中使用select 0,不是为了查询出数据,而是要查询出表结构以向DataTable中填充表结构
sda.Fill(dt); foreach (DataRow row in dt.Rows)
{
row["Area"] = Convert.ToDecimal(row["Height"]) * Convert.ToDecimal(row["Price"]);
}
//SqlCommandBuilder scb = new SqlCommandBuilder(sda); var dtc = dt.GetChanges();
SqlCommandBuilder scb = new SqlCommandBuilder(sda); sp.Stop();
Debug.Print("SqlCommandBuilder = " + sp.ElapsedMilliseconds);
sp.Restart(); if (dtc != null)
{
//执行更新
sda.Update(dtc);
} ////使DataTable保存更新
//dt.AcceptChanges(); sp.Stop();
Debug.Print("sda.Update = " + sp.ElapsedMilliseconds);
sp.Restart();
} } protected void Button3_Click(object sender, EventArgs e)
{
var sp = new Stopwatch();
sp.Start(); var list = new List<Article>(); var isDeleteSql = true; using (var da = new THCommon())
{
if (isDeleteSql)
{
var start = Convert.ToDateTime("2017-01-16");
var end = Convert.ToDateTime("2017-01-18"); var toDeleteListIDS =
da.Articles.Where(
t =>
t.CreateTime > start &&
t.CreateTime < end).Select(t => t.ID).ToList();
var ids = string.Join("','", toDeleteListIDS.ToArray());
var sql = string.Format("delete art.article where id in ('{0}') ", ids); da.Database.ExecuteSqlCommand(sql); sp.Stop();
Debug.Print("ExecuteSqlCommand delete = " + sp.ElapsedMilliseconds);
sp.Restart();
}
else
{
var dels = da.Articles.Take(); da.Articles.RemoveRange(dels);
da.SaveChanges();
sp.Stop();
Debug.Print("RemoveRange = " + sp.ElapsedMilliseconds);
sp.Restart();
} }
} /// <summary>
/// 先删除,再插入,在事务中执行
/// </summary>
private void DeleteAndInsert()
{
var rand = new Random();
using (var da = new THCommon())
{
using (System.Data.Entity.DbContextTransaction dbTran = da.Database.BeginTransaction())
{
try
{
var start = Convert.ToDateTime("2017-01-20");
var end = Convert.ToDateTime("2017-01-21"); var list = da.Articles.Where(t => t.CreateTime > start && t.CreateTime < end).ToList();
var ids = string.Join("','", list.Select(t => t.ID).ToArray()); //删除
var sql = string.Format("delete art.article where id in ('{0}') ", ids);
da.Database.ExecuteSqlCommand(sql); list.ForEach(delegate(Article art)
{
art.Height = ;
art.Number = ;
art.Weight = ;
art.Area = rand.Next();
}); SaveList(da, list); //commit transaction
dbTran.Commit();
}
catch (Exception ex)
{
//Rollback transaction if exception occurs
dbTran.Rollback();
} } }
}
protected void Button4_Click(object sender, EventArgs e)
{
DeleteAndInsert();
}
   protected void Button5_Click(object sender, EventArgs e)
{
//1.删除临时表
//2.选择记录,并修改,并批插入表临时表
//3.update from var sp = new Stopwatch();
sp.Start(); using (var da = new THCommon())
{
var list = da.Articles.Take(100000).ToList(); sp.Stop();
Debug.Print("ToList = " + sp.ElapsedMilliseconds);
sp.Restart(); list.ForEach(delegate(Article art)
{
art.Area = 1;
art.Height = 2;
art.Number = 3;
art.Price = 4;
art.Weight = 5;
}); sp.Stop();
Debug.Print("ForEach = " + sp.ElapsedMilliseconds);
sp.Restart(); var sql = "truncate table art.articletmp";
da.Database.ExecuteSqlCommand(sql); sp.Stop();
Debug.Print("ExecuteSqlCommand truncate = " + sp.ElapsedMilliseconds);
sp.Restart(); //保存上传记录
var tableToInsert = Tools.ListToDataTable(list);
string cnstr = da.Database.Connection.ConnectionString;
using (var sqlBC = new SqlBulkCopy(cnstr))
{
sqlBC.DestinationTableName = "Art.ArticleTmp";
sqlBC.BatchSize = 10000;
sqlBC.BulkCopyTimeout = 300;
sqlBC.WriteToServer(tableToInsert);
} sp.Stop();
Debug.Print(" SqlBulkCopy = " + sp.ElapsedMilliseconds);
sp.Restart(); sql = "update art.article set area = t0.area,height=t0.height,number = t0.number,price = t0.price,weight = t0.weight from art.articletmp t0 where art.article.id = t0.id";
da.Database.ExecuteSqlCommand(sql);
sp.Stop();
Debug.Print("ExecuteSqlCommand update = " + sp.ElapsedMilliseconds);
sp.Restart(); }
}

  

}

EFUpdate的更多相关文章

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

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

  2. Unity框架入门

    介绍Unity框架之前,先要说几个概念DIP依赖倒置原则.IOC控制反转.DI依赖注入 DIP是设计原则之一,定义:上层不应该依赖于底层,两者都依赖于抽象: 抽象不依赖于细节,细节应该依赖于抽象. 像 ...

  3. ADO,net 实体数据模型增、删、改,浅谈

    第一步:建立ADO.net数据模型,一步步操作就行 第二步:画个简单的测试界面 第三步铺代码 using DevComponents.DotNetBar.SuperGrid; using DevCom ...

随机推荐

  1. 创业日志N,一听到别人说创业我就怕

    最近总有些朋友想创业,咨询我的意见. 一般是在公司干腻了,有个想法,想出来试试水.还有是觉得自己的idea太棒了,想试试. 相同的是两者都有点怕.听说最近创业环境不好,没有投资!有个朋友推荐的创业者, ...

  2. 【MySQL】函数IFNULL、设置默认时间

    MySql 函数 IFNUll用法说明 IFNULL(expr1,expr2) 如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2. IFNULL()返回一个 ...

  3. mybatis一对多关联

    这里的一对多指的是:当我们查询一个对象的时候,同时将其有关联的多方对象都查询出来. 下面以国家(Country)和部长(Minsiter)做案例 一个国家有多个部长 1.定义实体 定义实体的时候需要注 ...

  4. 基于MemoryCache的缓存辅助类

    背景: 1. 什么是MemoryCache? memoryCache就是用电脑内存做缓存处理 2.使用范围? 可用于不常变的数据,进行保存在内存中,提高处理效率 代码: /// <summary ...

  5. 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...

  6. react native 的图表开源组件react-native-chart-android

    react-native-chart-android是一个图表开源组件,使用方法可以去这里 由于需要在数据上加上触摸事件,而github上没有说明看源码找了半天才找到下面的解决方法,特此记录一下: 在 ...

  7. DirectWrite 模糊问题——如何正确根据DIP计算实际像素

    使用Windows.Graphics.Display.DisplayInformation的时候,一定要根据RawPixelsPerViewPixel计算,而不是RawDpiX或RawDpiY,或许L ...

  8. Leetcode 75. Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  9. java中获取路径的几种基本的方法

    package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...

  10. eclipse 快捷键大全(转载)

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...