文章内容
2017/3/28 10:45:57,作 者: 黄兵
entity framework 删除多行数据
今天在使用Entity Framework的时候要删除多行数据,在网上找了一下资料,之后这个的思路不错,给大家看一下。
官方推荐的先查询数据,再根据查询的对象,删除对象。
这个给了我一个好的建议,先查出一条数据之后再删除,如果最后数据的总数为0,数据删完,好了有这个思路,开始写代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | public ActionResult DeleteProject( int Id, string Project) { switch (Project) { case "First" : using (UnitOfWork uow= new UnitOfWork()) { //二级目录无一级目录Id,则直接删除 //如果二级目录有一级目录Id,先删除二级目录,之后再删除一级目录 var getFirst = uow.SecondProjectRepository.GetAll().Where(x =>x.FirstProId == Id); if (getFirst.Count() == 0) { var getFirstItem = uow.FirstProjectRepository.Get(x => x.Id == Id); uow.FirstProjectRepository.Delete(getFirstItem); uow.SaveChanges(); } else { //二级目录可能有多个一级目录ID,这里是多数据删除 do { var getFirstItem = uow.SecondProjectRepository.GetAll().Where(x => x.FirstProId == Id).FirstOrDefault(); uow.SecondProjectRepository.Delete(getFirstItem); uow.SaveChanges(); } while (uow.SecondProjectRepository.GetAll().Where(x => x.FirstProId == Id).Count() != 0); //二级目录删除完成后,删除一级目录 var getFirstItemToDeleted = uow.FirstProjectRepository.Get(x => x.Id == Id); uow.FirstProjectRepository.Delete(getFirstItemToDeleted); uow.SaveChanges(); } } return RedirectToAction( "Index" ); case "Second" : using (UnitOfWork uow= new UnitOfWork()) { var getAllFirst = uow.SecondProjectRepository.Get(x => x.Id == Id); uow.SecondProjectRepository.Delete(getAllFirst); uow.SaveChanges(); } return RedirectToAction( "Index" ); default : return RedirectToAction( "Index" ); } return View(); } |
看上面的do...while语句,这里一直循环直到条件为False的时候跳出循环,不懂do...while看这里:C# do...while 循环
这个只能用于少量数据,如果数据很多的话这个性能有待验证。
查一条,删一条。这个是官方推荐的方法也有待考证。
现在没有时间研究,如果大家有什么看法,欢迎在下面留言。第一时间回复。
lost on 回复 有用(13)
var delSysUser = accountContext.SysUsers.Where(m => m.xxx == xxx && m.yyy == yyy) accountContext.SysUsers.RemoveRange(delSysUser); accountContext.SaveChangesAsync();
游客=Jkt on 2017-05-25 09:44:42
你这回复有10000点的伤害,成功被我阻挡了(机智^*^).