《MVC + EF+ WCF 》——批量删除数据

      在维护项目的时候,突然看见Human模块批量删除功能有点小瑕疵,具体的业务逻辑是这样的:在datagrid中获取多条教师的id,然后传给后台Controller进行拆分,最后经拆分后的id保存到数组中传递给Service层,调用底层封装好的删除方法(软删除),进行逐条删除。

  之前Controller是这样个逻辑,获取一条id,调用一次服务,访问一次数据库,删除一条数据,那么我如果想删除100条数据的话,就应该调用100次服务,访问100次数据库,然后再删除100条数据,感觉这样的代码太“欠抽了”,于是自己想优化一下,做一些行动下移的事情,积累一下自己的代码量。

  我现在想改成这样的业务逻辑:调用一次服务,访问一次数据库,删除多条数据。

  前台界面如下所示

  JS代码:获取要删除数据的ID(批量删除)

function Delete() {
    //获取选中行的数据,返回的是数组
    var selectRows = $('#dg').datagrid('getSelections');
    //如果没有选中行的话,提示信息
    if (selectRows.length < 1) {
        $.messager.alert('人事管理', '请选中要删除的人事记录', 'warning');
        return;
    }
    //如果选中行了,则要进行判断
    $.messager.confirm('人事管理', '确认要删除吗!删除之后,则不能恢复!', function (isDelete)           {
        //如果为真的话
        if (isDelete) {
            //定义变量值
            var strIds = "";
            for (var i = 0; i < selectRows.length; i++) {
                strIds += selectRows[i].TeacherID + ',';
            }
            strIds = strIds.substr(0, strIds.length - 1);
            $.post('/Personnal/DeleteTeacher?TeacherID=' + strIds, function (jsonObj) {
                if (jsonObj > 0) {
                    $.messager.show({
                        title: '提示',
                        msg: '教师删除成功!',
                        timeout: 5000,
                        showType: 'slide'
                    });
                    $('#dg').datagrid('reload');//删除成功后 刷新页面
                }
                else {
                    $.messager.alert('人事管理', '删除操作未能完全执行。请稍后再试!', 'warning');
                }
            }, 'JSON');
        }
    });
}

  Controller代码

public int DeleteTeacher()
        {
            int YorN = 1;   // 默认成功!
            bool isDeleted;
            try
            {
                string delTeacherID = Request.QueryString["TeacherID"]; //获取将要删除的教师信息的教工号
                string[] TeacherIDs = delTeacherID.Split(',');  //逗号分隔符
                BasicTeacherViewModel enteacher = new BasicTeacherViewModel();
                isDeleted = TeacherService.ModifyTeacher(enteacher, TeacherIDs); //调用修改职工号信息,将IsEnabled设置为0.不可用  
                if (!isDeleted)
                {
                    YorN = 0;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return YorN;//返回1,证明修改成功
        }


  服务端代码(B层)

 public bool ModifyTeacher(BasicTeacherViewModel enteacher, string[] proNames)
        {
            try
            {
                for (int i = 0; i < proNames.Length; i++)
                {
                    BasicTeacherEntities enTeacher = new BasicTeacherEntities();
                     Guid EditTeacherID = new Guid(proNames[i]);
                     {
                         enTeacher.TeacherID = EditTeacherID;
                         enTeacher.IsEnabled = 0;
                     };
                     this.CurrentDal.Update(enTeacher, "IsEnabled");//根据职工号修改教师信息,
                }
                return this.DbSession.SaveChanges() > 0; //如果大于0,返回true
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

  由于底层封装的Update的方法是根据实体来更新数据,所以我们更新的时候要创建一个教师的实体,但是在最后的代码中,每次的循环都创建一个BasicTeacherEntities,这样无疑给内存增加压力,曾尝试BasicTeacherEntities实体的实例化放在for循环外面,但是前台传来多条数据之后,for循环执行两次就结束了,这不知道为什么?自己继续研究吧....

评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值