我有两个POCO参与多对多关系。 “A”具有“B”的集合,但是“B”不需要具有“A”的集合。当我删除“B”时,不会删除Join表中的记录。如果存在Navigation属性,则实体框架代码优先只会删除Join记录。这是正确的还是有另一种方式?
示例:
public class User() {
public int Id { get; set; }
public string Name { get; set; }
public List<Role> Roles { get; set; }
}
public class Role() {
public int Id { get; set; }
public string Name { get; set; }
}
//... Mapping Config ...//
this.HasMany(x => x.Roles)
.WithMany(/*can't be expressed without navigation property*/)
.Map(m => {
m.MapLeftKey("Users_Id");
m.MapRightKey("Roles_Id");
m.ToTable("UserRoleLinks");
});
//... Deleting a Role that is in use ...//
using(var ctx = new MyDbContext()) {
var role = ctx.Roles.Find(1);
ctx.Roles.Remove(role);
ctx.SaveChanges();
}
在此方案中,删除角色时,UserRoleLinks记录将被孤立。 Mabye有不同的配置方式吗?
答案 0 :(得分:1)
这应该没有任何问题。默认ManyToManyCascadeDeleteConvention
将强制EF使用级联删除创建具有关系的联结表。 Role
实体中缺少导航属性对此没有影响。
问题的可能原因: