1

我试图为我们的数据库设置 CacadeOnDelete,这样如果您删除 a 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();
}
4

1 回答 1

1

问题是你之间关系的声明FolderFolder

如果我查看您的模型,您有一个包含许多子级的文件夹,但一个文件夹有一个唯一的父级。但是,您在模型构建器中设置了多对多关系。

尝试创建这种关系:

modelBuilder.Entity<Folder>()
    .HasOptional(f => f.Parent)
    .WithMany(f => f.Children)
    .HasForeignKey(f => f.ParentFolderId)
    .WillCascadeOnDelete();

你必须在你的文件夹上添加一个 ParentFolderId 属性,我认为它会起作用。你可以从 msdn 看一下这个例子

希望能帮助到你 !

于 2013-08-20T14:48:09.813 回答