1
是否有可能得到级联对这个对象模型删除?实体框架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
这使我得出的结论是,创建的模型不支持级联删除,我被迫单独删除评论。或者我在这里错过了什么?
正如我怀疑:-) – 2012-03-12 11:08:51