文章内容

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 循环

这个只能用于少量数据,如果数据很多的话这个性能有待验证。

查一条,删一条。这个是官方推荐的方法也有待考证。

现在没有时间研究,如果大家有什么看法,欢迎在下面留言。第一时间回复。

参考文章:itmaxin的专栏--EntityFramework中常用的数据删除方式

分享到:

发表评论

评论列表

user-ico

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点的伤害,成功被我阻挡了(机智^*^).