删除实体框架中的对象映射多对多关系

本文关键字:映射 关系 对象 实体 框架 删除 | 更新日期: 2023-09-27 18:30:33

在 ASP.NET MVC中,我有三个表: UsersRolesUsersInRoles(标准多对多连接表)。当我将其映射到 EF 时,它创建了两个实体类型:UsersRoles 。现在我想使用如下代码删除一些用户:

var aspnetUsers = _db.aspnet_Users.Single(a => a.UserId == id);
_db.aspnet_Users.DeleteObject(aspnetUsers);

当然我做不到,因为在表 UsersInRoles 的 SQL 级别中有一个连接的行。

如何从EF级别删除该行(UsersInRoles表未映射)?

删除实体框架中的对象映射多对多关系

在上下文中调用SaveChanges()之前,您需要从用户对象中删除所有角色:

var aspnetUser = _db.aspnet_Users.Single(a => a.UserId == id);
foreach(var role in aspnetUser.Roles.ToArray())
{
    aspnetUser.Roles.Remove(role);
}
_db.aspnet_Users.DeleteObject(aspnetUser);
_db.SaveChanges();

这将防止由数据库中的引用约束引起的异常,并确保删除 UsersInRoles 表中的相应记录。