这些是我的简化实体:
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个不同的上下文,一个用于插入,另一个用于删除,则会出现此错误
答案 0 :(得分:2)
您必须首先清除角色集合(必须加载用户的角色),然后才能删除用户。
答案 1 :(得分:1)
如果您想要删除此内容,请执行错误说明。
作为DELETE方法的一部分,您应该按顺序执行此操作。
1)获取用户包括其相关角色,您可以使用User.Include(r =&gt; r.roles)
2)迭代并删除给定用户的角色(确保在执行此循环时使用toList())
3)删除用户
4)savechanges
答案 2 :(得分:0)
user.Roles
.ToList()
.ForEach(role => user.Roles.remove(role));
context.Users.remove(user);
context.SaveChanges();