Vsual Studio 2022 MiniExcel + EF+CodeFirst + Z.EntityFramework.Extensions大批量数据批量插入、更新、删除

本文主要是介绍Vsual Studio 2022 MiniExcel + EF+CodeFirst + Z.EntityFramework.Extensions大批量数据批量插入、更新、删除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • MiniExcel
  • Z.EntityFramework.Extensions
  • 技术实现
    • .app.config文件配置
    • TEST实体类
    • 数据库与模型连接类MiniExcelDb
    • 批量插入
    • 批量更新
    • 批量删除


MiniExcel

简介
MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。

目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。

特点
低内存耗用,避免OOM、频繁 Full GC 情况
支持即时操作每行数据
兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询
轻量,不需要安装 Microsoft Office、COM+,DLL小于150KB
简便操作的 API 风格。

开源地址:点击前往

Z.EntityFramework.Extensions

简介
Z.EntityFramework.Extensions,插件收费,EF结合该插件性能很给力,当然网上也有不少破解的,跟破解教程,如果是商用这里还是比较建议购买使用,如果是个人研究学习,在下也觉得还是可以搞一搞的。

获取途径
1.官方网站下载最新的dll文件。
2.VS Nuget直接搜索进行安装。

官方地址:点击前往

技术实现

本例子是基于ADO.NET + CodeFirst + Oracle进行实体建模,如果出现无法选到Oracle驱动就看我另一篇文章Visual Studio 2022 ADO.NET数据实体模型+EF+CodeFirst添加Oracle数据库驱动。还要NuGet安装框架必须支持的EntityFramework6.0、Oracle.ManagedDataAccess、Oracle.ManagedDataAccess.EntityFramework,两个Oracle的要注意版本号一致,因为不是主讲所以这里就直奔主题。

.app.config文件配置

<connectionStrings><!--添加数据库连接--><add name="MiniExcelDb" connectionString="USER ID=xxx;DATA SOURCE=ip/实例;Password=xxx" providerName="Oracle.ManagedDataAccess.Client" />
</connectionStrings>

TEST实体类

namespace MiniExcelImport.Model
{using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Data.Entity.Spatial;[Table("xxx.TEST")]public partial class TEST{[Key][Column(Order = 0)]public string ID { get; set; }[StringLength(100)]public string CODE{ get; set; }public DateTime? BEGINDATE { get; set; }public DateTime? ENDDATE { get; set; }}
}

数据库与模型连接类MiniExcelDb

using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;namespace MiniExcelImport.Model
{public partial class MiniExcelDb : DbContext{public MiniExcelDb(): base("name=MiniExcelDb"){}public virtual DbSet<TEST> TEST{ get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Entity<TEST>().Property(e => e.CODE).IsUnicode(false);modelBuilder.Entity<TEST>().Property(e => e.ID).IsUnicode(false);}}
}

批量插入

//关闭大硬盘缓存
var config = new OpenXmlConfiguration { EnableSharedStringCache = false };
//如果Excel中的A列有空的值,则排除这些数据
var rows = MiniExcel.Query(path, configuration: config).TakeWhile(row => row.A != null);
//与数据库建立连接,业务执行完毕会自动释放
using (MiniExcelDb db = new MiniExcelDb())
{//声明表集合对象,用于存放解析到的每一条数据List<TEST> listInset = new List<TEST>();foreach (var row in rows){TEST test = new TEST(){ID = Guid.NewGuid().ToString(),CODE = row.A,BEGINDATE = row.B == null ? null : Convert.ToDateTime(row.B),ENDDATE = row.C == null ? null : Convert.ToDateTime(row.C)};listInset.Add(test);//开始执行插入操作if (listInset.Count > 0){try{db.BulkInsert(listInset);}catch (Exception ex){Console.WriteLine("批量插入失败......");}}}
}

批量更新

与插入的区别就在要找到表中要更改的数据,加到集合中,然后进行批量更新。

//获取哪些数据需要更新
List<TEST> listUpdate = new List<TEST>();
//TEST test = db.TEST.Find(v => v.ID == id);
TEST test = db.TEST.Where(v => v.ID == id).FirstOrDefault();
test.CODE = row.A,
test.BEGINDATE = row.B == null ? null : Convert.ToDateTime(row.B),
test.ENDDATE = row.C == null ? null : Convert.ToDateTime(row.C)
listUpdate.Add(test);
//判断是否有数据
if (listUpdate.Count > 0)
//批量更新
db.BulkUpdate(listUpdate);

批量删除

//获取哪些数据需要删除
List<TEST> listDel= new List<TEST>();
TEST del= new TEST { ID = id};
listDel.Add(del);
//判断是否有数据
if (listDel.Count > 0)
//批量删除
db.BulkDelete(listDel);

MiniExcel还有更深,更高级的用法。开源地址:点击前往

这篇关于Vsual Studio 2022 MiniExcel + EF+CodeFirst + Z.EntityFramework.Extensions大批量数据批量插入、更新、删除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201027

相关文章

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +