2012-04-07 87 views
4

在ASP.NET MVC中,我有三个表: Users,RolesUsersInRoles(标准多对多连接表)。 当我已经将其映射到EF,它创建两个实体类型:UsersRoles。 现在我想删除类似下面的一些用户使用代码:移除实体框架中多对多关系的对象映射

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

当然我不能这样做,因为在表UsersInRoles SQL水平是有连接的行。

如何删除EF水平行(UsersInRoles表不映射)?

+0

你也可以使用'级联上delete'选项(形成流利)设置你的表像,如果这是你想要在任何时候(的行为,虽然我个人不喜欢它,但是取决于你的模型/希望这样)。 – NSGaga 2012-04-07 23:35:41

回答

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