实体状态EntityState设置了Deleted,EF Core API在数据库中执行删除语句,使用DbContext的Remove()方法删除数据库中的数据
var dept = new Department(){Id = 3};context.Remove(dept);await context.SaveChangesAsync();
2 删除多条数据
List<Department> dept = new List<Department>(){new Department() { Id=1 },new Department() { Id=2 },new Department() { Id=3 }};context.RemoveRange(dept);await context.SaveChangesAsync();
1. Cascade:当父实体删除时引用的实体也会删除
2. ClientSetNull:将外键默认值设置为null
3. Restrict:阻止级联删除
4. SetNull:外键属性值设置为null
protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<Employee>(entity =>{entity.HasOne(d => d.Department).WithMany(p => p.Employee).HasForeignKey(d => d.DepartmentId).OnDelete(DeleteBehavior.Cascade).HasConstraintName("FK_Employee_Department");});}
我们需要重新运行一下migration 提交该行为
现在我们删除Department表中的数据,所有关联的Employee表的数据也会被删除,这是因为Department是父实体,Employee是子实体
下面代码删除Id为5的Department,因此该department下所有的employee会自动删除
var dept = new Department() { Id = 5 };context.Remove(dept);await context.SaveChangesAsync();
3 EF Core CRUD 操作– 删除数据
我们来完成CRUD操作中的Delete功能
Index视图显示所有实体,在Index视图的table内添加删除列,删除列将包含删除按钮,用户点击删除按钮,表单将提交并调用删除方法,EF Core 将会删除该数据
@{ViewData["Title"] = "部门数据";}@model IEnumerable<Department><div class="container"><div class="row mb-3"><div class="col-sm-3"><a asp-action="Create" class="btn btn-secondary">新增</a></div><div class="col-sm-3"></div><div class="col-sm-3"></div><div class="col-sm-3"></div></div><div class="row mb-3"><div class="col-sm"><table class="table table-bordered align-middle"><thead><tr><th>编号</th><th>名称</th><th>修改</th><th>删除</th></tr></thead><tbody>@foreach (Department dept in Model){<tr><td>@dept.Id</td><td>@dept.Name</td><td><a class="btn btn-sm btn-primary" asp-action="Update" asp-route-id="@dept.Id">修改</a></td><td><form asp-action="Delete" asp-route-id="@dept.Id" method="post"><button type="submit" class="btn btn-sm btn-danger">删除</button></form></td></tr>}</tbody></table></div></div></div>
删除列将显示如下:

[HttpPost]public async Task<IActionResult> Delete(int id){var emp = new Department() { Id = id };context.Remove(emp);await context.SaveChangesAsync();return RedirectToAction("Index");}
@{ViewData["Title"] = "所有员工";}@model IEnumerable<Employee><div class="container"><div class="row mb-3"><div class="col-sm-3"><a asp-action="Create" class="btn btn-secondary">新增</a></div><div class="col-sm-3"></div><div class="col-sm-3"></div><div class="col-sm-3"></div></div><div class="row mb-3"><div class="col-sm"><table class="table table-bordered align-middle"><thead><tr><th>编号</th><th>姓名</th><th>职务</th><th>部门</th><th>修改</th><td>删除</td></tr></thead><tbody>@foreach (Employee emp in Model){<tr><td>@emp.Id</td><td>@emp.Name</td><td>@emp.Designation</td><td>@emp.Department.Name</td><td><a class="btn btn-sm btn-primary" asp-action="Update" asp-route-id="@emp.DepartmentId">修改</a></td><td><form asp-action="Delete" asp-route-id="@emp.Id" method="post"><button type="submit" class="btn btn-sm btn-danger">删除</button></form></td></tr>}</tbody></table></div></div></div>
接下来在EmployeeController.cs 文件中添加Delete 方法,代码如下
[HttpPost]public async Task<IActionResult> Delete(int id){var emp = new Employee() { Id = id };context.Remove(emp);await context.SaveChangesAsync();return RedirectToAction("Index");}
运行应用程序浏览器输入https://localhost:7013/Employee 地址,这里我们看到每一个员工记录旁边都有一个删除按钮,点击任何一个删除按钮将删除员工
总结