2

这些是我的简化实体:

public class User : Entity
{
    public virtual ICollection<Role> Roles { get; set; }
}

public class Role : Entity
{
    public virtual ICollection<User> Users { get; set; }
}

var user = dbContext.Set<User>().Find(id);
dbContext.Set<User>().Remove(user);
dbContext.SaveChanges(); // here i get error (can't delete because it's the     
//referenced by  join table roleUsers

问题是连接表引用了用户表,并且 ef 在删除用户之前没有从连接表中删除记录

我尝试编写测试用例,我注意到:

如果使用相同的上下文来添加具有角色的用户,保存更改,删除并再次保存更改它可以工作

但是如果我使用 2 个不同的上下文,一个用于插入,另一个用于删除,我会收到此错误

4

3 回答 3

2

您必须先清除角色集合(必须加载用户的角色)才能删除用户。

于 2011-02-22T13:07:52.023 回答
1

如果您只想删除此内容,请按照错误的说明进行操作。

作为 DELETE 方法的一部分,您应该按顺序执行此操作。

1)获取用户,包括其相关角色,您可以使用 User.Include(r=>r.roles)

2)遍历并删除给定用户的角色(确保在执行此循环时使用 toList() )

3) 删除用户

4) 保存更改

于 2011-10-31T02:32:13.563 回答
0
user.Roles
    .ToList()
    .ForEach(role => user.Roles.remove(role));

context.Users.remove(user);
context.SaveChanges();
于 2014-11-05T11:16:18.297 回答