如何使用代码生成器对记录进行批量修改

通用权限管理系统提供了一套代码生成器,这里介绍少如何使用其中的记录批量修改功能,

方法一:

List<KeyValuePair<string, object>> whereParameters = new List<KeyValuePair<string, object>>();
whereParameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldSITE_ID, targetSiteId));
whereParameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldFEE_TYPE, targetFeeType));
List<QUOTEntity> priceList = QUOTManager.GetList<QUOTEntity>(whereParameters);
foreach (var PntEntity in priceList)
{
 PntEntity.DeletionStateCode = 1;
 PntEntity.ModifiedBy = userInfo.RealName;
 PntEntity.ModifiedOn = DateTime.Now;
 PntEntity.ModifiedUserId = userInfo.Id;
 QUOTManager.Update(PntEntity);
}

 以上方法需要找出全部记录,逐条更新,效率不是很好。

方法二:

List<KeyValuePair<string, object>> whereParameters = new List<KeyValuePair<string, object>>();
whereParameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldSITE_ID, targetSiteId));
whereParameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldFEE_TYPE, targetFeeType));
List<KeyValuePair<string, object>> parameters = new List<KeyValuePair<string, object>>();
parameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldDeletionStateCode, 1));
parameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldModifiedBy, userInfo.RealName));
parameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldModifiedOn, DateTime.Now));
parameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldModifiedUserId, userInfo.Id));
parameters.Add(new KeyValuePair<string, object>(QUOTEntity.FieldMODIFIEDSITE, userInfo.CompanyName));
QUOTManager.SetProperty(whereParameters, parameters); 

可以看到,上面代码使用了SetProperty方法,whereParameters是条件,parameters是参数,

表示将符合条件的记录设置对应的属性。效率要比第一条高。

关于第二种方法,我们来看下其实现

       public virtual int SetProperty(KeyValuePair<string, object> whereParameter, KeyValuePair<string, object> parameter)
        {
            List<KeyValuePair<string, object>> whereParameters = new List<KeyValuePair<string, object>>();
            whereParameters.Add(whereParameter);
            List<KeyValuePair<string, object>> parameters = new List<KeyValuePair<string, object>>();
            parameters.Add(parameter);
            return DbLogic.SetProperty(DbHelper, this.CurrentTableName, whereParameters, parameters);
        }
        /// <summary>
        /// 设置属性
        /// </summary>
        /// <param name="dbHelper">数据库连接</param>
        /// <param name="tableName">目标表名</param>
        /// <param name="whereParameters">条件字段,条件值</param>
        /// <param name="parameters">更新字段,更新值</param>
        /// <returns>影响行数</returns>
        public static int SetProperty(IDbHelper dbHelper, string tableName, List<KeyValuePair<string, object>> whereParameters, List<KeyValuePair<string, object>> parameters)
        {
            SQLBuilder sqlBuilder = new SQLBuilder(dbHelper);
            sqlBuilder.BeginUpdate(tableName);
            foreach (var parameter in parameters)
            {
                sqlBuilder.SetValue(parameter.Key, parameter.Value);
            }
            sqlBuilder.SetWhere(whereParameters);
            // sqlBuilder.SetDBNow(FieldModifiedOn);
            return sqlBuilder.EndUpdate();
        }

底层自动实现了条件和设置功能的拼接,满足外部多种调用方式。其底层实现所在位置:

感兴趣的朋友可继续看下其底层实现原理,自从使用第二种方式对记录批量更新后,后台处理速度确实提高了很多。

时间: 2024-10-17 04:46:04

如何使用代码生成器对记录进行批量修改的相关文章

Ubuntu Linux 批量修改图片大小以及文件重命名

0x00 本文属于随笔, 仅供作者学习记录. 0x01 批量修改图片大小: [email protected]:~/$ find ./ -name '*.jpg' -exec convert -resize 220X520! {} {} \; 备注: 上述命令中, find 路径 -name 匹配.jpg后缀的文件 -exec 对find结果执行convert命令 后面是convert参数, 如果没有安装convert, sudo apt-get install convert安装即可. -re

mysql表名等大小写敏感问题、字段类型timestamp、批量修改表名、oracle查询历史操作记录等

mysql表名等大小写敏感问题:http://blog.csdn.net/postnull/article/details/72455768: 1 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 2 1.数据库名与表名是严格区分大小写的: 3 2.表的别名是严格区分大小写的: 4 3.列名与列的别名在所有的情况下均是忽略大小写的: 5 4.字段内容默认情况下是大小写不敏感的. ================================================

mssql数据库游标批量修改符合条件的记录

//需求:由于项目刚上传,没有票数,为了表现出一定的人气,需要在一开始把各项目的票数赋一个值 , 但每个项目不能一样,否则容易看出问题,呵呵 . DECLARE @Id varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Id FROM dbo.kinpanAwardProject where session=9) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Curs

如何批量修改200台以上web服务器密码

作为一个运维工作人员,有时候我们需要对自己负责的web服务器批量修改密码,如果一台一台改,会相对来说较为麻烦,所以在这里我们可以使用NIS账户统一认证. 我们假设有一部账号主控服务器来管理网域中所有主机的账号, 当其他的主机有用户登入的需求时,才到这部主控服务器上面要求相关的账号.密码等用户信息,如此一来,如果想要增加.修改.删除用户数据,只要到这部主控服务器上面处理即可, 这样就能够降低重复设定使用者账号的步骤了! NIS=Network Information Service   网络信息服

批量修改vss工作目录

vss作为源代码版本控制工具,可以针对不同的文件夹设置不同的本地工作目录,这样可以方便我们不同的个性化需求.但是往往实际情况是,我们设置了不同的工作目录,后来却发现导致引用混乱,每个人每次获取项目文件都需要重新修改一边引用,才可以重新编译成功.这我们才知道只应该针对完全独立的不同项目才有必要设置不同的工作目录.这时候我们往往想批量修改一下vss的工作目录,但是却发现子目录并没有跟着做相应的更改.那我们怎么办呢?    由于vss将用户的配置都保存在服务器上,所以我们可以在服务器上找到users下

C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就看看如何用它来实现批量修改实体框架(Entity Framework)中的类名.我们都知道ADO.NET 实体数据模型中有一种方式是以数据库模型来生成数据模型的,这是个很简便的实体数据模型生成的方式,但是因为微软提供的自定义接口不足,我们无法实现对生成的数据模型实体类批量进行修改(至少我上网找了很久

iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)

大致花了一个月时间,利用各种空闲时间,将这个客户端实现了,在这里主要是想记录下,设计的大体思路以及实现过程中遇到的坑...... 这个项目的github地址:https://github.com/wzpziyi1/GroupPurchase 主要实现的功能,用UICollectionViewController展示团购数据,根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除,友盟分享的集成,利用UIView+AutoLayout写布局,实现地图定位.自定义大头针等 整个项

MySQL数据库批量修改数据库中的表

问题:今天工作遇到这样一个问题,需要把数据库中的所有表,每个表加入四个字段,如果表少,我们可以手动去添加或者修改,如果是成千上百万张表的话,我们如何去修改,现记录下来. 解决方法: 找到数据库的建模资料,就是PDM文件.发个截图 下面我们就要用一个工具了,就是powerdesign,我们将用这个工具批量修改数据库表中的字段.需要用vb脚本. 我们打开powerdesign,点开脚本运行栏,方法,工具--如图 点击后的运行脚本框如下写好的脚本放在上面运行即可. vb语法 Option Explic

批量修改mysql表、表、数据库的字符校对规则

记录一个在工作中遇到的问题,也不算是问题,为的是找一种简便的方法批量修改数据表字段的排序规则,在MySQL中叫collation,常常和编码CHARACTER一起出现的.collation有三种级别,分辨是数据库级别,数据表级别和字段级别. 1.The database level 2.The table level 3.The column level https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collatio