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