EF删除与批量删除。Entity Framework删除与批量删除 电脑版发表于:2020/5/13 22:59 [TOC] ###EF删除 ####方法1:直接执行数据库 ``` int count = oapEntities.Database.ExecuteSqlCommand("delete from users where id=@userid", new SqlParameter("userid", userId)); ``` 需要自己去写sql语句 ####方法2:先查询数据库在删除 1:先根据id查询需要删除的对象 ``` Users users = oapEntities.Users.Where(a => a.Id == userId).FirstOrDefault(); ``` 2:修改删除的状态 ``` oapEntities.Users.Remove(users); ``` >注意这一步只是修改一个状态而已不会真正的删除 3:执行保存数据库操作,这一步才会把真正的操作反应的数据库 ``` int count = oapEntities.SaveChanges(); ``` ####方法3:不需要自己写sql语句,而且也不需要查询一次数据库 自己实例化一个直接修改状态就不用去重新查询一次,这样就可以节省效率 ``` Users users = new Users() { Id = userId }; //修改他的状态为删除 oapEntities.Entry(users).State = System.Data.Entity.EntityState.Deleted; ``` tip:当然也需要调用SaveChanges进行保存更改到数据库 ####三种方法的效率对比 理论上来说:第一章最快,然后是第三种,第二种最慢 第二种最慢:是相比其他两种他不仅需要删除,而且督多了一个查询数据库的步骤 第三种理论上比第一种慢的原因:是因为第三种他多了生成sql语句的过程,第一种sql语句是直接写出来的 ###批量删除 >注意批量删除尽量避免循环操作数据库 第一步:获取需要删除的id ``` //第一步:找到所有需要删除的id $("#userTable input[type='checkbox']:checked").each(function () { ids += $(this).val() + ","; }); ``` 第二步:把id传到后台,把这些id的状态都修改成删除 ``` public ActionResult BatchDelete(string userIds) { //先实例化ef的上下文对象 oapEntities oapEntities = new oapEntities(); //去掉最后一个逗号 string trimUserIds = userIds.TrimEnd(','); List<string> userIdList = trimUserIds.Split(',').ToList(); //循环修改id涉及到用户的状态 foreach (string item in userIdList) { Users users = new Users() { Id = Convert.ToInt32(item) }; oapEntities.Entry(users).State = System.Data.Entity.EntityState.Deleted; } int count = oapEntities.SaveChanges();//保存数据库的方法,返回受影响的行数 return Json(count); } ``` 第三步:调用saveChanges方法即可 oapEntities.SaveChanges();保存数据库的方法,返回受影响的行数,真正执行数据库操作的地方, >注意不要循环的去执行oapEntities.SaveChanges(),这样他就是循环的执行数据库了 ###作业: 1:实现删除和批量删除 2:批量删除的时候前台即时删除