首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

在 mvc ef 中进展删除

2013-06-26 
在 mvc ef 中进行删除请问下边2中写法,会有什么区别写法1:不同的地方:ListTask taskList db.Task.Wher

在 mvc ef 中进行删除

请问下边2中写法,会有什么区别

写法1:
不同的地方:
                    List<Task> taskList = db.Task.Where(a => guidArr.Contains(a.Guid)).ToList();
                    List<TaskDept> taskDeptList = db.TaskDept.Where(a => guidArr.Contains(a.TaskGuid)).ToList();
代码1.完整



        /// <summary>
        /// 任务-批量删除
        /// (2013.5.25)
        /// </summary>
        /// <param name="idArr"></param>
        /// <returns></returns>
        public static bool BatchDelete(string[] guidArr)
        {
            try
            {
                using (var db =new WEBVODEntities())
                {

                    List<Task> taskList = db.Task.Where(a => guidArr.Contains(a.Guid)).ToList();

                    List<TaskDept> taskDeptList = db.TaskDept.Where(a => guidArr.Contains(a.TaskGuid)).ToList();

                    foreach (var task in taskList)
                    {    
                        db.DeleteObject(task);
                    }

                    foreach (var taskDept in taskDeptList)
                    {
                        db.DeleteObject(taskDept);
                    }

                    db.SaveChanges();

                    return true;
                }
            }
            catch
            { 


            }
            return false;
 
        }



写法2:
不同地方
                    var taskList = db.Task.Where(a => guidArr.Contains(a.Guid));
                    var taskDeptList = db.TaskDept.Where(a => guidArr.Contains(a.TaskGuid));
代码2.完整

        public static bool BatchDelete(string[] guidArr)
        {
            try
            {
                using (var db =new WEBVODEntities())
                {
                    var taskList = db.Task.Where(a => guidArr.Contains(a.Guid));
                    var taskDeptList = db.TaskDept.Where(a => guidArr.Contains(a.TaskGuid));

                    foreach (var task in taskList)
                    {    
                        db.DeleteObject(task);
                    }

                    foreach (var taskDept in taskDeptList)
                    {
                        db.DeleteObject(taskDept);
                    }

                    db.SaveChanges();

                    return true;
                }
            }
            catch
            { 
            }
            return false;
 
        }





[解决办法]
你可以监视一下数据库,你会发现区别所在

第一种情况,数据库执行查询是在ToList()方法之后方法

而第二种情况,数据库执行查询其实在是循环遍历时发生

也就是说ToList()已经取得数据库交互得到结果集,而如果没有的话,只是在拼SQL,真正的查询还没有发生

热点排行