Est-il possible d'obtenir une suppression en cascade sur ce modèle d'objet?Entity Framework 4.3 et suppression en cascade
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);
}
Ce modèle va générer une base de données qui en cascade supprimer Animaux lorsqu'un propriétaire est supprimé. Mais il ne supprimera pas le commentaire, il supprimera simplement le FK du tableau des commentaires. Si j'essaie de modifier les contraintes en conséquence.
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
L'erreur sql suivante apparaît.
Introducing FOREIGN KEY constraint 'FK_Comments_Pets_Pet_Id' on table 'Comments' may cause cycles or multiple cascade paths
Cela me amène à la conclusion que le modèle créé ne peut pas supporter de suppression en cascade et je suis obligé de la suppression des commentaires séparemment. Ou est-ce qu'il me manque quelque chose ici?
Comme je me doutais :-) –