tnblog
首页
视频
资源
登录

EF删除与批量删除。Entity Framework删除与批量删除

8623人阅读 2020/5/13 22:59 总访问:824536 评论:0 收藏:0 手机
分类: ORM

EF删除

方法1:直接执行数据库

  1. int count = oapEntities.Database.ExecuteSqlCommand("delete from users where id=@userid", new SqlParameter("userid", userId));

需要自己去写sql语句

方法2:先查询数据库在删除

1:先根据id查询需要删除的对象

  1. Users users = oapEntities.Users.Where(a => a.Id == userId).FirstOrDefault();

2:修改删除的状态

  1. oapEntities.Users.Remove(users);

注意这一步只是修改一个状态而已不会真正的删除

3:执行保存数据库操作,这一步才会把真正的操作反应的数据库

  1. int count = oapEntities.SaveChanges();

方法3:不需要自己写sql语句,而且也不需要查询一次数据库

自己实例化一个直接修改状态就不用去重新查询一次,这样就可以节省效率

  1. Users users = new Users() { Id = userId };
  2. //修改他的状态为删除
  3. oapEntities.Entry(users).State = System.Data.Entity.EntityState.Deleted;

tip:当然也需要调用SaveChanges进行保存更改到数据库

三种方法的效率对比

理论上来说:第一章最快,然后是第三种,第二种最慢
第二种最慢:是相比其他两种他不仅需要删除,而且督多了一个查询数据库的步骤
第三种理论上比第一种慢的原因:是因为第三种他多了生成sql语句的过程,第一种sql语句是直接写出来的

批量删除

注意批量删除尽量避免循环操作数据库

第一步:获取需要删除的id

  1. //第一步:找到所有需要删除的id
  2. $("#userTable input[type='checkbox']:checked").each(function () {
  3. ids += $(this).val() + ",";
  4. });

第二步:把id传到后台,把这些id的状态都修改成删除

  1. public ActionResult BatchDelete(string userIds)
  2. {
  3. //先实例化ef的上下文对象
  4. oapEntities oapEntities = new oapEntities();
  5. //去掉最后一个逗号
  6. string trimUserIds = userIds.TrimEnd(',');
  7. List<string> userIdList = trimUserIds.Split(',').ToList();
  8. //循环修改id涉及到用户的状态
  9. foreach (string item in userIdList)
  10. {
  11. Users users = new Users() { Id = Convert.ToInt32(item) };
  12. oapEntities.Entry(users).State = System.Data.Entity.EntityState.Deleted;
  13. }
  14. int count = oapEntities.SaveChanges();//保存数据库的方法,返回受影响的行数
  15. return Json(count);
  16. }

第三步:调用saveChanges方法即可
oapEntities.SaveChanges();保存数据库的方法,返回受影响的行数,真正执行数据库操作的地方,

注意不要循环的去执行oapEntities.SaveChanges(),这样他就是循环的执行数据库了

作业:

1:实现删除和批量删除
2:批量删除的时候前台即时删除


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价
这一生多幸运赶上过你.
排名
1
文章
860
粉丝
112
评论
163
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术