用 Entity Framework  进行 增,删,改。都是基于Model进行的,且Model都是有状态追踪的。这样Entity Framework才能正常增,删,改。

有时候,要根据某个字段,批量更新或者删除数据,用Entity Framework就会显得很是繁琐,且不高效。

Entity Framework Plus 为Entity Framework 提供 BatchUpdate 和 BatchDelete 操作扩展。使得更新和删除数据,变得简单而高效了许多。

废话不多说,直接实践给大家看。

    一. 创建项目以及相关代码展示,还是之前的解决方案 “EntityFrameworkPlusSolution”。

1. 在解决方案,新增”EntityFrameworkPlus.BatchOperations.Demo“ WinForm 项目。

在项目中分别新增 “BatchOperations”,“BatchUpdate”,“BatchDelete”  窗口,每个窗口布局和代码如下。

BatchOperations (BatchUpdate,BatchDelete 窗口的入口)

using System;
using System.Windows.Forms; namespace EntityFrameworkPlus.BatchOperations.Demo
{
public partial class BatchOperations : Form
{
public BatchOperations()
{
InitializeComponent();
} private void btnBatchUpdate_Click(object sender, EventArgs e)
{
new BatchUpdate().ShowDialog();
} private void btnBatchDelete_Click(object sender, EventArgs e)
{
new BatchDelete().ShowDialog();
}
}
}

BatchUpdate

using System;
using System.Linq;
using System.Windows.Forms;
using EntityFrameworkPlus.DbContext;
using EntityFrameworkPlus.Models;
using Z.EntityFramework.Plus; namespace EntityFrameworkPlus.BatchOperations.Demo
{
public partial class BatchUpdate : Form
{
public BatchUpdate()
{
InitializeComponent();
SearchGood();
} public void SearchGood()
{
using (var db = new EntityFrameworkPlusDbContext())
{
dgvList.DataSource = db.Goodses.ToList();
}
} private void btnUpdateWithSearch_Click(object sender, EventArgs e)
{
var creator = txtCreator.Text.Trim();
var unitPrice = Convert.ToDecimal(txtUnitPrice.Text.Trim()) ;
using (var db = new EntityFrameworkPlusDbContext())
{
db.Goodses.Where(c => c.Creator.Equals(creator)).Update(c => new GoodsModel {UnitPrice = unitPrice});
}
SearchGood();
}
}
}

BatchDelete

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Windows.Forms;
using EntityFrameworkPlus.DbContext;
using EntityFrameworkPlus.Models;
using Z.EntityFramework.Plus; namespace EntityFrameworkPlus.BatchOperations.Demo
{
public partial class BatchDelete : Form
{
public BatchDelete()
{
InitializeComponent();
SearchGood();
}
public void SearchGood()
{
using (var db = new EntityFrameworkPlusDbContext())
{
dgvList.DataSource = db.Goodses.ToList();
}
}
private void btnDeleteWithSearch_Click(object sender, EventArgs e)
{
using (var db = new EntityFrameworkPlusDbContext())
{
var unitPrice = Convert.ToDecimal(txtUnitPrice.Text);
// ReSharper disable once NotAccessedVariable
Expression<Func<GoodsModel, bool>> whereExpression = null;
if (cbxOperation.Text.Equals("="))
{
whereExpression = d => d.UnitPrice == unitPrice;
}
if (cbxOperation.Text.Equals(">="))
{
whereExpression = d => d.UnitPrice >= unitPrice;
}
if (cbxOperation.Text.Equals(">"))
{
whereExpression = d => d.UnitPrice > unitPrice;
}
if (cbxOperation.Text.Equals("<="))
{
whereExpression = d => d.UnitPrice <= unitPrice;
}
if (cbxOperation.Text.Equals("<"))
{
whereExpression = d => d.UnitPrice < unitPrice;
} db.Goodses.Where(whereExpression).Delete();
}
SearchGood();
} }
}

2. Demo 数据,还是拿商品数据。

BatchUpdate Demo的是 根据Creator,更新单价,SQL表示大概 update Sample_Goods set UnitPrice = 100 where Creator = 'david' 。

BatchDelete  根据UnitPrice = ,< , > 来删除商品,SQL 表示大概 delete Sample_Goods where UnitPrice(=|>|<)100

二 .测试结果

1. BatchUpdate

1>.初始化窗口

2.>执行之前

3.> 执行之后

2. BatchDelete

1.>初始化窗口

2.>执行之前

3.>执行之后

这篇又到这里了,该结束了,Entity Framework Plus 系统四篇博文,已经全部结束了,从之前博文评论来说,有人觉得 Entity Framework Plus 是侵入的,这里我要说明一下,大家不要被我糟糕的Demo,没有一点封装所引导,我这里只是简单的介绍,作为一个引子,供大家学习,Entity Framework Plus 是一个扩展工具,需要大家封装一下。比喻引用在DDD里面。

源代码:https://github.com/haibozhou1011/EntityFramework-PlusSample

第四篇 Entity Framework Plus 之 Batch Operations的更多相关文章

  1. 第三篇 Entity Framework Plus 之 Query Cache

    离上一篇博客,快一周,工作太忙,只能利用休息日来写一些跟大家分享,Entity Framework Plus 组件系列文章,之前已经写过两篇 第一篇 Entity Framework Plus 之 A ...

  2. 第二篇 Entity Framework Plus 之 Query Future

    从性能的角度出发,能够减少 增,删,改,查,跟数据库打交道次数,肯定是对性能会有所提升的(这里单纯是数据库部分). 今天主要怎样减少Entity Framework查询跟数据库打交道的次数,来提高查询 ...

  3. 第一篇 Entity Framework Plus 之 Audit

    一般系统会有登陆日志,操作日志,异常日志,已经满足大部分的需求了.但是有时候,还是需要Audit 审计日志,审计日志,主要针对数据增,改,删操作数据变化的记录,主要是对数据变化的一个追踪过程.其中主要 ...

  4. .NET基础篇——Entity Framework 数据转换层通用类

    在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity F ...

  5. Entity Framework Plus 系列目录

    Entity Framework Plus 系列文章计划的已经全部写完,可能还有其他功能没有写到,希望大家能够多动手,尝试一下使用,一定会给您带来一些帮助的.文章全部写完,也应该出一个目录方便查看,目 ...

  6. entity framework 新手入门篇(3)-entity framework实现orderby,count,groupby,like,in,分页等

    前面我们已经学习了entityframework的基本的增删改查,今天,我们将在EF中实现一些更加贴近于实际功能的SQL方法. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和 ...

  7. C# Entity Framework并发处理

    原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...

  8. C#综合揭秘——Entity Framework 并发处理详解

    引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...

  9. Entity Framework 6.1-Code First【转】

      Entity Framework 6.1-Code First 分类: Entity Framework 2014-04-21 14:56 2034人阅读 评论(0) 收藏 举报 entityen ...

随机推荐

  1. C#创建dll类库

    类库让我们的代码可复用,我们只需要在类库中声明变量一次,就能在接下来的过程中无数次地使用,而无需在每次使用前都要声明它.这样一来,就节省了我们的内存空间.而想要在类库添加什么类,还需取决于类库要实现哪 ...

  2. AI人工智能系列随笔:syntaxnet 初探(1)

    人工智能是 最近的一个比较火的名词,相信大家对于阿尔法狗都不陌生吧?其实我对人工智能以前也是非常抵触的,因为我认为机器人会取代人类,成为地球乃至宇宙的霸主,但是人工智能带给我的这种冲击,我个人感觉是欲 ...

  3. php注册审核

    通过注册审核,判断刚创建的账户是否可以使用. 后台管理员审核通过后,账号可以使用. 通过session 设置只能通过登录入口进入网页. 原理:通过数据库设置账号的一个字段状态,例: isok:1, i ...

  4. js参数arguments的理解

    原文地址:js参数arguments的理解 对于函数的参数而言,如下例子 function say(name, msg){ alert(name + 'say' + msg); } say('xiao ...

  5. autocomplete的使用

    autocomplete使用分为本地调用方法和读取远程读取数据源的方法 (1)本地调用方法 <script src="Scripts/jquery-1.4.1.min.js" ...

  6. 如何理解DT将是未来IT的转型之路?

    如今的IT面临着内忧外患的挑战. 一方面,企业多多少少都建立了信息化,有些企业或集团甚至会有数几十个分公司,包含直销.代理.零售以及第三方物流等多种业态.越是复杂的业务,信息化建设越困难,比如运用大量 ...

  7. 【SAP业务模式】之ICS(二):基础数据

    讲完业务,计划在前台做一下ICS的基本操作,不过在操作之前,得先建立好基本的基础数据. 1.首先创建接单公司LEON,对应工厂是ADA: 2.创建生产公司MXPL,对应工厂是PL01: 3.创建接单公 ...

  8. Java虚拟机 JVM

    finalize();(不建议使用,代价高,不确定性大) 如果你在一个类中覆写了finalize()方法, 那么你可以在第一次被GC的时候,挽救一个你想挽救的对象,让其不被回收,但只能挽救一次. GC ...

  9. vim环境变量配置、背景色配置

    我们使用vi或者vim的时候,如果想要显示行号,可能会这样做:切换到命令模式,然后输入set nu,再按回车键就显示了:还有就是咱们在编写程序的时候,有的时候会希望按下回车键后,光标不是每次都在行首, ...

  10. wireshark 相关提示

    Packet size limited during capture      提示说明标记的包没有抓全,在某些操作系统中,默认只抓96个字节,tcpdump中有"-s"参数可用于 ...