一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的批量删除与更新

简介:

系列回顾

          前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作和一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的条件查询两篇文章我演示了ORM的基本使用并引申到开发中最常见的条件查询业务,今天我基于前一篇文章的条件查询的基础演示根据条件的批量删除与更新。

问题提出

          在演示ORM的基于操作一文中我们演示了基于单记录(实体)的删除(Update)和更新(处理),但是没有提到指量记录的更新与删除,本文旨在提出一种ORM应用中的解决方案并演示他的用法。

如果解决

          批量更新与删除数据记录的本质是执行带批量查询条件的Update和Delete语句,ORM组件要完成这样的功能,所实现的思想就是根据条件生成批量更新的SQL语句,批量删除的SQL语句新式: delete +数据库表名+ where + 条件表达式,批量更新的SQL语句新式:update+数据库表名+set+(列名=?[,…])+ where + 条件表达式。

          既然我们知道了这样的处理方法,那么我们就可以转换为ORM组件的表示方式进行处理,在ORM组件的ITable接口中存在着以下三个方法:

    /// <summary>
    /// 从数据库中删除数据表记录。
    /// </summary>
    /// <param name="condition">数据查询条件。</param>
    /// <remarks>删除操作所影响的数据行数。</remarks>
    void Delete(Condition condition);

    /// <summary>
    /// 根据条件更新数据库表中的指定列的值。
    /// </summary>
    /// <param name="colValues">要更新的列及指定的值。</param>
    /// <param name="condition">数据查询条件。</param>
    /// <remarks>更新操作所影响的数据行数。</remarks>
    void Update(ColumnCollection colValues,Condition condition);

    /// <summary>
    /// 根据条件更新数据库表中的指定列的值。
    /// </summary>
    /// <param name="colValues">要更新的列及指定的值。</param>
    /// <param name="condition">数据查询条件。</param>
    /// <remarks>更新操作所影响的数据行数。</remarks>
    void Update(IDictionary<string, object> colValues,Condition condition);

          Delete方法使用很简单,带上删除记录的条件对象即可,Update方法的使用则复杂一些,除了设置更新记录的条件,还得设置更新列的内容,提供两种表示形式,ColumnCollection 集合与字典集合,其目的是完成字典名=?(值)的表示形式。

演示简介

          关于条件查询以及条件的构造的知识差不多也就是这些,讲起来也没有什么讲头,重点才于如何组合这些条件实现复杂的业务,在今天的案例中我选择性的演示几个条件的用法,所使用的数据还是商品字典,达到以下的功能:

           1.删除记录ID从100到500的记录并且单位为“1*瓶/瓶”的所有商品。

           2.更新商品编码前2位为“1a”并且单位为“1*袋/袋”的所有商品的商品说明为“垃圾货”,本演示使用update的两种重载。

          实现,在ClassLibDemo.DAL.SQLServer项目的类ProductList增加以下代码:

    public void DeleteProduct(int iStart, int iEnd, string unit)
    {
        Condition condition = this.CreateCondition();
        List<int> values = new List<int>(2);
        values.Add(iStart);
        values.Add(iEnd);
        condition.AddElement("IDN", values, ElementType.BetWeen);
        condition.AddElement("UNIT", unit);

        this.Delete(condition);
    }

    public void UpdateProductDescription(string code, string unit,string desc)
    {
        Condition condition = this.CreateCondition();
        condition.AddElement("CODE", code, ElementType.MatchPrefix);
        condition.AddElement("UNIT", unit);

        Dictionary<string, object> values = new Dictionary<string, object>();
        values.Add("DESCRIPTION", desc);
        this.Update(values,condition);
    }        

    public void UpdateProductDescription2(string code, string unit,string desc)
    {
        Condition condition = this.CreateCondition();
        condition.AddElement("CODE", code, ElementType.MatchPrefix);
        condition.AddElement("UNIT", unit);

        ColumnCollection values = new ColumnCollection(this);
        values.AddColumn("DESCRIPTION",DbType.String,desc);
        this.Update(values,condition);
    }        

         我们在控制台演示项目中使用这些查询:

    class ConditionUpdate
    {
        /// <summary>
        /// 删除记录ID从到的记录并且单位为“*瓶/瓶”的所有商品。
        /// </summary>
        public void DemoConditionDelete()
        {
            ProductList table = new ProductList();
            table.OrmAccessor = OrmContext.OrmAccessor;
            table.DeleteProduct(100, 500, "1*瓶/瓶");

            System.Console.WriteLine("删除完成");
        }

        /// <summary>
        /// 更更新商品编码前2位为“1a”并且单位为“1*袋/袋”的所有商品的商品说明为“垃圾货”。
        /// </summary>
        public void DemoConditionUpdate()
        {
            ProductList table = new ProductList();
            table.OrmAccessor = OrmContext.OrmAccessor;
            table.UpdateProductDescription("1a", "1*袋/袋", "垃圾货");

            System.Console.WriteLine("更新完成");
        }

        /// <summary>
        /// 删更新商品编码前2位为“1a”并且单位为“1*袋/袋”的所有商品的商品说明为“垃圾货”。
        /// </summary>
        public void DemoConditionUpdate2()
        {
            ProductList table = new ProductList();
            table.OrmAccessor = OrmContext.OrmAccessor;
            table.UpdateProductDescription2("1a", "1*袋/袋", "垃圾货");

            System.Console.WriteLine("更新完成");
        }

          案例输出结果:

image

SQL事件探查:

7E{66WJJRR[X9]}X)Q88V49

         有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:ORM.Demo3.rar。 

链接

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。


    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/10/04/1841861.html,如需转载请自行联系原作者


相关文章
|
7月前
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
11天前
|
安全 数据库 数据安全/隐私保护
七天.NET 8操作SQLite入门到实战 - 第五天引入SQLite-net ORM并封装常用方法
七天.NET 8操作SQLite入门到实战 - 第五天引入SQLite-net ORM并封装常用方法
|
4月前
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
|
4月前
|
存储 文字识别 C#
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
|
4月前
|
SQL 开发框架 关系型数据库
16个值得推荐的.NET ORM框架
16个值得推荐的.NET ORM框架
135 1
|
4月前
1152人参与的.NET ORM框架使用情况统计投票结果
1152人参与的.NET ORM框架使用情况统计投票结果
|
SQL 开发框架 Oracle
值得推荐的.NET/.NET Core ORM框架汇总
值得推荐的.NET/.NET Core ORM框架汇总
900 0
值得推荐的.NET/.NET Core ORM框架汇总
|
SQL 关系型数据库 C#
.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
前言 在以前的一篇文章中,为大家分享了《什么是ORM?为什么用ORM?浅析ORM的使用及利弊》。那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper,Entity Framework(EF)还是ServiceStack.OrmLite?或者是你还有更好的ORM推荐呢? 如果有的话,不防也一起分享给大家。
15073 0
|
JavaScript API 数据库
从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM
代码已上传Github+Gitee,文末有地址   书接上文:《从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之六 || API项目整体搭建 6.1 仓储》,我们简单的对整体项目进行搭建,用到了项目中常见的仓储模式+面向接口编程,核心的一共是六层,当然你也可以根据自己的需求进行扩展,比如我在其他的项目中会用到Common层,当然我们这个项目接下来也会有,或者我还会添加Task层,主要是作为定时项目使用,我之前用的是Task Schedule,基本能满足需求。
1490 0