Entity framework 删除与EF6具有多对多关系的实体记录

Entity framework 删除与EF6具有多对多关系的实体记录,entity-framework,ef-code-first,Entity Framework,Ef Code First,我试图删除相关记录时出错。 我有一个客户模型和一个客户组模型。一个客户可以属于多个CustomerGroup 我希望能够从customergroup中添加和删除客户。添加是最简单的部分,当我尝试从customergroup中删除客户时,整个记录都会从customergroup表中删除 为了让事情更容易理解,这里是我的代码 [Table("CustomerGroups")] public class CustomerGroupModel { [Key] [DataMember]

我试图删除相关记录时出错。 我有一个客户模型和一个客户组模型。一个客户可以属于多个CustomerGroup

我希望能够从customergroup中添加和删除客户。添加是最简单的部分,当我尝试从customergroup中删除客户时,整个记录都会从customergroup表中删除

为了让事情更容易理解,这里是我的代码

 [Table("CustomerGroups")]
public class CustomerGroupModel
{
    [Key]
    [DataMember]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid CustomerGroupId { get; set; }

    [DataMember]
    public Guid BusinessId { get; set; }
    public virtual Business Business { get; set; }

    [DataMember]
    [Display(Name = "Group Name")]
    public string GroupName { get; set; }

     [ScriptIgnore]
    public virtual List<Customer> CustomersInGroup { get; set; }
}
执行此操作时,表CustomerGroup中的所有记录都将被删除。如何仅从CustomerSingGroups表中删除相关记录


任何建议都将不胜感激

删除CustomerGroup记录的原因是您将其从上下文中删除,该上下文被翻译为将其完全从数据库中删除。要仅删除与选定客户相关的CustomerGroup实例之间的关系,必须为SelectedGroups属性分配一个空列表:

contextCustomer.SelectedGroups = new List<CustomerGroups>();
context.SaveChanges();
contextCustomer.SelectedGroups=newlist();
SaveChanges();

谢谢你,马克。奇怪的是,在保存上下文之前必须新建一个新列表。这确实很奇怪:)@DiverDan如果你想一想,那真的不是;通过将新列表指定给此属性,您将丢弃旧列表,而不是它包含的实体。或者,我非常确定您可以从列表中删除实体(而不是从
DbSet
),甚至可以使用。
            modelBuilder.Entity<Customer>()
            .HasMany(x => x.SelectedGroups)
            .WithMany(x => x.CustomersInGroup).Map(
                m =>
                {
                    m.MapLeftKey("CustomerId");
                    m.MapRightKey("CustomerGroupId");
                    m.ToTable("CustomersInGroups");
                });
            using (var context = new MyContext())
            {
                var contextCustomer = context.Customers
                    .Include("SelectedGroups")
                    .SingleOrDefault(a => a.Id==customer.Customer.Id); 

                contextCustomer.SelectedGroups.ToList()
                        .ForEach(r => context.CustomerGroups.Remove(r));
                context.SaveChanges();

             }
contextCustomer.SelectedGroups = new List<CustomerGroups>();
context.SaveChanges();