####方法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
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:批量删除的时候前台即时删除