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

来源:互联网 发布:淘宝粉星便利店靠谱么 编辑:程序博客网 时间:2024/05/01 12:52

      在维护项目的时候,突然看见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循环执行两次就结束了,这不知道为什么?自己继续研究吧....

2 0
原创粉丝点击