一步一步教你使用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,如需转载请自行联系原作者


相关文章
|
4月前
|
人工智能 前端开发 Devops
.NET技术在现代开发中的作用:.NET技术的核心价值、在现代应用开发中的实际应用、以及面临的挑战与未来趋势。
.NET技术是软件开发领域的核心力量,本文从其核心价值、实际应用及未来挑战三方面进行探讨。它支持多种语言,提供强大的开发工具和丰富的类库,并具备跨平台能力。在现代应用开发中,.NET广泛应用于企业级系统、Web应用、移动应用、云服务和游戏开发等领域。面对性能优化、容器化、AI集成等挑战,.NET持续创新以适应不断发展变化的技术环境。
70 4
|
4月前
|
SQL 开发框架 数据库
".NET开发者的超能力:AgileEAS.NET ORM带你穿越数据库的迷宫,让数据操作变得轻松又神奇!"
【8月更文挑战第16天】AgileEAS.NET是面向.NET平台的企业应用开发框架,核心功能包括数据关系映射(ORM),允许以面向对象方式操作数据库,无需编写复杂SQL。通过继承`AgileEAS.Data.Entity`创建实体类对应数据库表,利用ORM简化数据访问层编码。支持基本的CRUD操作及复杂查询如条件筛选、排序和分页,并可通过导航属性实现多表关联。此外,提供了事务管理功能确保数据一致性。AgileEAS.NET的ORM简化了数据库操作,提升了开发效率和代码可维护性。
54 5
|
2月前
|
SQL 开发框架 关系型数据库
值得推荐的.NET ORM框架
值得推荐的.NET ORM框架
|
4月前
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
|
4月前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
126 0
|
4月前
|
XML 开发框架 数据格式
.Net Core 开发框架,支持多版本的类库
.Net Core 开发框架,支持多版本的类库
94 0
|
5月前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
59 3
|
5月前
|
开发框架 .NET API
.NET Core 和 .NET 标准类库项目类型有什么区别?
在 Visual Studio 中,可创建三种类库:.NET Framework、.NET Standard 和 .NET Core。.NET Standard 是规范,确保跨.NET实现的API一致性,适用于代码共享。.NET Framework 用于特定技术,如旧版支持。.NET Core 库允许访问更多API但限制兼容性。选择取决于兼容性和所需API:需要广泛兼容性时用.NET Standard,需要更多API时用.NET Core。.NET Standard 替代了 PCL,促进多平台共享代码。