6

删除多对多关系中的记录时,关系表有孤立记录。我在 DbContext 中设置了以下多对多关系。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<Car>()
     .HasMany(u => u.Owners)
     .WithMany(l => l.Cars)
     .Map(ul =>
     {
       ul.MapLeftKey("CarId");
       ul.MapRightKey("OwnerId");
       ul.ToTable("CarOwners");
     });
}

我的所有者模型具有虚拟属性 Cars:

public virtual ICollection<Car> Cars { get; set; } 

我的汽车模型具有虚拟财产所有者:

public virtual ICollection<Owner> Owners { get; set; } 

我按如下方式删除 Car(db 是我的 DbContext,car 是 Car 模型)。

db.Cars.Remove(car);
db.SaveChanges()

当我删除汽车时,我希望表 CarOwners 中具有该 CarId 的所有记录也会被删除,但事实并非如此。有什么建议吗?

4

1 回答 1

2

解决方案是:

ALTER TABLE [dbo].[CarOwners]  WITH CHECK ADD  CONSTRAINT [FK_Car_Owners] FOREIGN KEY([CarId])
REFERENCES [dbo].[Car] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[CarOwners]  WITH CHECK ADD  CONSTRAINT [FK_Owner_Cars] FOREIGN KEY([OwnerId])
REFERENCES [dbo].[Owner] ([Id])
ON DELETE CASCADE
GO

注意:如果您要向包含数据的现有表添加约束,则必须确保首先删除孤立记录......否则ADD CONSTRAINT将会失败。

于 2012-08-22T18:33:48.070 回答