c# mvc 中linq和ef配合实现批量插入数据
来源:互联网 发布:php好吗 编辑:程序博客网 时间:2024/05/22 03:11
原来的批量插入数据的方式(单个实体)
基本思路是new实体然后拼好 在通过foreach调用事务dbContext.InsertNotSaveChanges(); foreach结束后保存事务
这样做linq生成的sql很混乱而且效率很低 代码示例如下:
/// <summary> /// 保存招生进度新增的办理试听 /// </summary> /// <param name="customerIds">客户ids</param> /// <param name="classId">班级id</param> /// <param name="courseId">课程id</param> /// <param name="sectioinId">小节id</param> public void CreateCustomerAuditionSections(List<int> customerIds, int classId, int courseId, int sectioinId) { using (var dbContext = new TopOnlineDbContext()) { foreach (var customerId in customerIds) { //构建试听表实体 var newAudition = new T_Audition() { Appointment = DateTime.Now, CustomerId = customerId, ClassId = classId, CourseId = courseId, SectionId = sectioinId, AuditionStatus = 0, IsDel = false, CreateTime = DateTime.Now }; dbContext.InsertNotSaveChanges(newAudition); } dbContext.SaveChanges(); } }改进代码:先拼成list 再用dbContext.BatchInsert(newAuditionList)将list插入db
/// <summary> /// 保存招生进度新增的办理试听 /// </summary> /// <param name="customerIds">客户ids</param> /// <param name="classId">班级id</param> /// <param name="courseId">课程id</param> /// <param name="sectioinId">小节id</param> public void CreateCustomerAuditionSections(List<int> customerIds, int classId, int courseId, int sectioinId) { using (var dbContext = new TopOnlineDbContext()) { var newAuditionList = new List<T_Audition>(); foreach (var customerId in customerIds) { //构建试听表实体 var newAudition = new T_Audition() { Appointment = DateTime.Now, CustomerId = customerId, ClassId = classId, CourseId = courseId, SectionId = sectioinId, AuditionStatus = 0, IsDel = false, CreateTime = DateTime.Now }; newAuditionList.Add(newAudition); } dbContext.BatchInsert(newAuditionList); } }
BatchInsert方法:
/// <summary> /// 批量插入数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public int BatchInsert<T>(List<T> list) where T : ModelBase { this.Set<T>().AddRange(list); this.SaveChanges(); return list.Count; }
进阶:
批量插入主表时同时批量插入从表的方法
直接代码实例 应该很好理解了 T_Customer客户表和T_FollowLog表是一对多的关系 要在ef的实体和DbContext配置好关联
List<T_Customer> tCustomers;//维护客户表关联的跟进表 foreach (var tCustomer in tCustomers) { var tFollowLog = new T_FollowLog { FollowTime = DateTime.Now, FollowStatus = tCustomer.FollowStatus, Content = "", NextFollowTime = Convert.ToDateTime(tCustomer.NextFollowTime), NeedFollow = tCustomer.NeedFollow, IsDel = false, IsUsed = true, CreateTime = DateTime.Now }; var followLogList = new List<T_FollowLog>() { tFollowLog }; tCustomer.TFollowLogList = followLogList; } //插入客户表和跟进表 var insertResult = EnrollService.InsertCustoms(tCustomers);
EnrollService.InsertCustoms()方法:
/// <summary> /// 插入客户信息和跟进信息(excel中批量插入) /// </summary> /// <param name="tCustomers">客户信息实体</param> /// <returns>true表示成功,false表示失败</returns> public bool InsertCustoms(List<T_Customer> tCustomers) { using (var dbContext = new TopOnlineDbContext()) { //批量插入拼好的客户和跟进记录实体 var result = dbContext.BatchInsert(tCustomers); return result > 0; } }
结束撒花
阅读全文
1 0
- c# mvc 中linq和ef配合实现批量插入数据
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- C#实现数据批量插入
- 《EasyUI + MVC + EF +WCF》——实现对Datagrid中数据的批量修改或保存
- C#中海量数据的批量插入和更新
- C#中数据的批量插入和更新_Asp.net
- C#中数据的批量插入和更新
- C#中海量数据的批量插入和更新 [顶]
- C#中海量数据的批量插入和更新
- MVC和EF 和LINQ 的关系
- C# 将数据批量插入accesss中
- ASP.NET + MVC +EF 实现批量更新
- C# 面试EF 和mvc
- C# 批量插入和更新数据
- C#知识的扩展(EF、Linq、lambda、MVC、jquery)
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
- 在C#中完成海量数据的批量插入和更新
- 处理多个输入查询
- spring事物回滚机制 (事务异常回滚,捕获异常不抛出就不会回滚)
- 【学习摘记】马士兵Servlet&JSP_课时30_上午复习_准备下午的课——枯燥学习后的教育箴言
- 你想要的下拉刷新和上拉加载框架
- 那些被你忽略的性能
- c# mvc 中linq和ef配合实现批量插入数据
- JVM 垃圾收集器
- Spring_boot定时任务
- jQuery获取窗口大小及窗口大小改变时执行代码实例
- Java & Android 面试题整理
- 福利篇:学习编程视频免费领取
- Ubuntu的一些常用快捷键
- Amazon内购接入流程以及测试
- golang 正则获取和替换