EF Core批量插入与删除

using EFPlus.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace EFPlus
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            //GetCount();
            await MultiDeleteWithSql();

            stopwatch.Stop();  //停止Stopwatch
            Console.WriteLine("Using Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());//这里使用时间差来输出,如:时:分:秒

            Console.WriteLine("Hello World!");
        }

        //static void Main(string[] args)
        //{
        //    Stopwatch stopwatch = new Stopwatch();
        //    stopwatch.Start();

        //    MultiDelete();

        //    stopwatch.Stop();  //停止Stopwatch
        //    Console.WriteLine("Using Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());//这里使用时间差来输出,如:时:分:秒

        //    Console.WriteLine("Hello World!");
        //}


        static void GetCount()
        {
            using (var db = new BlogDbContext())
            {
                var allblogs = db.Blogs.Count();
                Console.WriteLine(allblogs);
            }

        }

        static void MultiDelete()
        {
            using (var db = new BlogDbContext())
            {
                var allblogs = db.Blogs.ToArrayAsync();
                db.Blogs.RemoveRange(allblogs.Result);
                db.SaveChanges();
            }
            
        }

        static async Task MultiDeleteAsync()
        {
            using (var db = new BlogDbContext())
            {
                var allblogs = db.Blogs.ToArrayAsync();
                db.Blogs.RemoveRange(allblogs.Result);
                await db.SaveChangesAsync();
            }
        }

        /// 
        /// 批量插入
        /// 
        static void MultiInsert()
        {
            using (var db = new BlogDbContext())
            {
                for (int i = 0; i < 1000000; i++)
                {
                    var blog = new Blog { Url = "https://www.cnblog.com/p/" + i.ToString() };
                    db.Blogs.Add(blog);
                }
                db.SaveChanges();
            }

        }

        static async Task MultiInsertAsync()
        {
            using (var db = new BlogDbContext())
            {

                for (int i = 0; i < 1000000; i++)
                {
                    var blog = new Blog { Url = "https://www.cnblog.com/p/" + i.ToString() };
                    db.Blogs.Add(blog);
                }
                await db.SaveChangesAsync();
            }
        }

        static async Task MultiDeleteWithSql()
        {
            var db = new BlogDbContext();
            var conn = db.Database.GetDbConnection();
            try
            {
                await conn.OpenAsync();
                using (var command = conn.CreateCommand())
                {
                    string query = "delete from blogs where Id<1000001";
                    command.CommandText = query;
                    var rows = await command.ExecuteNonQueryAsync();
                }
            }
            finally
            {
                conn.Close();
            }
        }

    }
}

在release模式下,localdb批量插入一百万数据,用时: 

 EF Core批量插入与删除_第1张图片

localdb批量删除一百万,用时(等了3分钟...不等了):

 EF Core批量插入与删除_第2张图片

异步方法下批量插入一百万数据:用时:

EF Core批量插入与删除_第3张图片

异步方法下批量删除一百万数据:用时:

 EF Core批量插入与删除_第4张图片

EF执行原生sql删除一百万:

 EF Core批量插入与删除_第5张图片

在sql server 2008 R2数据库批量插入一百万数据:

 EF Core批量插入与删除_第6张图片

 在sql server 2008 R2数据库批量删除一百万数据(3分钟不等了...):

EF Core批量插入与删除_第7张图片 

用EF执行原生sql批量删除:

EF Core批量插入与删除_第8张图片

 

你可能感兴趣的:(dotNet)