在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
表未映射)? 最佳答案
在上下文上调用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表中的相应记录。