我有两个POCOs参与一个多对多的关系。"A“有一个"B”的集合,但"B“没有必要有"A”的集合。当我删除"B“时,连接表中的记录不会被删除。Entity Framework code-first似乎只在存在导航属性时删除联接记录。这是正确的,还是有其他方法?
示例:
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记录将成为孤立记录。也许有不同的方式来配置它?
发布于 2011-04-07 22:22:34
这应该不会有任何问题。默认ManyToManyCascadeDeleteConvention
将强制EF使用级联删除来创建具有关系的连接表。Role
实体中缺少导航属性对此没有影响。
所以你的问题可能的原因是:
https://stackoverflow.com/questions/5587974
复制相似问题