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

开发者社区> agilelab> 正文

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

简介: 系列回顾           前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作和一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的条件查询两篇文章我演示了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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
django的orm中F对象的使用
今天不巧就用上了。 就是将数据库的字段,自增1的场景。 from django.db.models import F DeployPool.objects.filter(name=deployversion_id).
1150 0
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记
- 整体更新 - 更新字段 - 字段操作 - 数组操作 - 删除
80 0
+关注
agilelab
魏琼东,系统分析师、系统架构师、高级项目经理。有17年开发和管理经验,擅长企业软件过程改进、系统分析与架构设计、.NET平台架构技术、SQL Server/ORACLE数据库技术、分布式架构体系及高性能并行计算,尤其对中小软件企业的企业级软件研发管理体系有着深入的研究与应用。
116
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载