读书人

在 mvc ef 中进展删除

发布时间: 2013-06-26 14:29:32 作者: rapoo

在 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,真正的查询还没有发生

读书人网 >asp.net

热点推荐