5

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

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

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

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

4

1 回答 1

4

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

于 2012-04-07T18:07:47.540 回答