EF 添加方式比较

时间:2021-11-20 08:53:32
using System;
using System.Collections.Generic;
using DBAccess.Models;
using EntityFramework.BulkInsert.Extensions;
namespace LinqDemoTest
{
class Program
{
static void Main(string[] args)
{
using (var db = new HIPContext())
{
List<TablebulkCopy> list = new List<TablebulkCopy>();
for (int i = ; i < ; i++)
{
list.Add(new TablebulkCopy { Name = "Name" + i }); }
//Add range 方式插入数据库
DateTime dt1 = DateTime.Now;
db.TablebulkCopies.AddRange(list);
db.SaveChanges();
DateTime dt2 = DateTime.Now;
TimeSpan t = dt2 - dt1;
Console.WriteLine("A:Ef Range add :" + t.TotalMilliseconds); //Bulk insert 方式插入
dt1 = DateTime.Now;
db.BulkInsert(list);
db.SaveChanges();
dt2 = DateTime.Now; t = dt2 - dt1;
Console.WriteLine("B:Ef bulk insert :" + t.TotalMilliseconds); //逐个插入,一次提交 dt1 = DateTime.Now;
foreach (var item in list)
{ db.TablebulkCopies.Add(item); }
dt2 = DateTime.Now;
t = dt2 - dt1;
db.SaveChanges();
Console.WriteLine("C:Ef add one by one save changes one time :" + t.TotalMilliseconds); //逐个添加,逐个提交
dt1 = DateTime.Now;
foreach (var item in list)
{ db.TablebulkCopies.Add(item);
db.SaveChanges();
}
dt2 = DateTime.Now;
t = dt2 - dt1; Console.WriteLine("D:Ef add & save changes one by one :" + t.TotalMilliseconds);
Console.ReadKey();
} } }
}

EF 添加方式比较

结果分析:

插入相同数据,bulk insert的方式耗时最短,令我惊讶的是 逐个插入 再提交的方式 耗时居然比 addrange的方式快很多。

当然同等条件下异步提交(SaveChangesAsync),耗时会短点。但这个要考虑到异步操作过程中,假如使用同一个上下文对象的话,就不好控制了。

addrange 和add的问题,下次再研究。