このオブジェクトモデルでカスケード削除を取得できますか?Entity Framework 4.3およびカスケード削除
public class Entity
{
[Key, Column("Id"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
public class Comment : Entity
{
public string Text { get; set; }
}
public class Owner : Entity
{
public Owner()
{
Pets = new List<Pet>();
Comments = new List<Comment>();
}
public string Name { get; set; }
public virtual ICollection<Pet> Pets { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
public class Pet : Entity
{
public Pet()
{
Comments = new List<Comment>();
}
public virtual Owner Owner { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public string Name { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Pet>()
.HasOptional(d => d.Owner)
.WithMany(d => d.Pets)
.WillCascadeOnDelete(true);
}
このモデルは、所有者が削除されたときにペットを削除するデータベースを生成します。しかし、それは削除コメントをカスケードしません、それはコメントテーブルからFKを削除するだけです。それに応じて制約を修正しようとすると。
ALTER TABLE [dbo].[Comments] WITH CHECK ADD CONSTRAINT [FK_Comments_Pets_Pet_Id] FOREIGN KEY([Pet_Id])
REFERENCES [dbo].[Pets] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Comments] CHECK CONSTRAINT [FK_Comments_Pets_Pet_Id]
GO
ALTER TABLE [dbo].[Comments] WITH CHECK ADD CONSTRAINT [FK_Comments_Owners_Owner_Id] FOREIGN KEY([Owner_Id])
REFERENCES [dbo].[Owners] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Comments] CHECK CONSTRAINT [FK_Comments_Owners_Owner_Id]
GO
次のSQLエラーが表示されます。
Introducing FOREIGN KEY constraint 'FK_Comments_Pets_Pet_Id' on table 'Comments' may cause cycles or multiple cascade paths
これは、作成したモデルは、カスケード削除をサポートすることができないという結論に私をもたらし、私はよseparatlyコメントの削除にに強制しています。それとも、私はここに何かを逃していますか?
私が疑ったように:-) –