在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表中的相应记录。

08-16 07:11