我试图为我们的数据库设置CacadeOnDelete,这样如果删除Folder
,则所有子文件夹也会被删除。
Folder
设置如此
public class Folder
{
[Key]
public int FolderId { get; set; }
public string Name { get; set; }
public Folder Parent { get; set; }
[ForeignKey("Parent")]
public int ParentFolderId { get; set; }
public virtual ICollection<Folder> Children { get; set; }
public virtual ICollection<Device> Devices { get; set; }
}
我试图像这样设置级联删除,但是当我运行它时,数据库生成永远不会完成,尽管我也没有例外
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Folder>()
.HasMany(x => x.Devices)
.WithMany(x => x.PresentInFolders);
modelBuilder.Entity<Folder>()
.HasOptional(f => f.Parent)
.WithMany(f => f.Children)
.HasForeignKey(f => f.ParentFolderId)
.WillCascadeOnDelete();
}
答案 0 :(得分:1)
问题是在Folder
和Folder
之间宣布您的关系。
如果我查看您的模型,您有一个包含许多子项的文件夹,但文件夹具有唯一的父项。但是,您在模型构建器中设置了“多对多”关系。
尝试创建此关系:
modelBuilder.Entity<Folder>()
.HasOptional(f => f.Parent)
.WithMany(f => f.Children)
.HasForeignKey(f => f.ParentFolderId)
.WillCascadeOnDelete();
你必须在你的文件夹上添加一个ParentFolderId属性,我认为它会起作用。您可以查看this example from msdn
希望它有所帮助!