在ASP.NET MVC中我有三个表:
Users
,Roles
,UsersInRoles
(标准多对多的加入表)。
当我将其映射到EF时,它创建了两个实体类型:Users
和Roles
。
现在我想使用如下代码删除一些用户:
var aspnetUsers = _db.aspnet_Users.Single(a => a.UserId == id);
_db.aspnet_Users.DeleteObject(aspnetUsers);
当然我不能这样做,因为在表UsersInRoles
的SQL级别中有一个连接的行。
如何从EF级别删除该行(UsersInRoles
表未映射)?
答案 0 :(得分:3)
在上下文中调用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表中的相应记录。