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; } 

My Car モデルには仮想プロパティ Owners があります。

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

次のように車を削除します (db は私の DbContext、車は車のモデルです)。

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

車を削除すると、その CarId を持つテーブル CarOwners 内のすべてのレコードも削除されることを期待していましたが、そうではありません。何かアドバイス?

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 に答える