删除数据库中的树

时间:2019-07-10 08:22:24

标签: c# database entity-framework tree entity-framework-6

首先我有一个带有EF6代码的WPF应用程序,并且连接了场景,但是在删除数据库中的树时遇到了问题:这花费了太多时间。

基本上,这是我的Tree类:

    public class Tree
    {
        public int Id { get; set; }
        public ObservableCollection<Tree> Children { get; set; }
        public Tree Parent { get; set; }
        public Tree()
        {
            Children = new ObservableCollection<Tree>();
        }
    }

这是我在 Dal 中的功能,其中 db dbContext ,并且具有 dbSet 名为 TreeElements

        public async Task<bool> RemoveTreeElementInCascade(Tree tr)
        {
            try
            {
                List<Tree> tmp = tr.Children.ToList();
                db.TreeElements.Remove(tr);
                List<Task> tasks = new List<Task>();
                foreach (Tree t in tmp)
                {
                    tasks.Add(RemoveTreeElementInCascade(t));
                }
                Task.WaitAll(tasks.ToArray());
                await db.SaveChangesAsync();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

当我将此函数称为具有约500个元素的Tree时,可能需要3分钟。我不知道怎么了我虽然只打算删除一个,然后执行CascadeDelete,但是我不知道该怎么做。这是Tree的FluentAPI:

        modelBuilder.Entity<Tree>()
                .HasMany(t => t.Children)
                .WithMany()
                .Map(m =>
                {
                    m.ToTable("TreeElementChildren");
                    m.MapLeftKey("TreeElementId");
                    m.MapRightKey("ChildrenId");
                });

也许我的删除功能做错了,或者在这种情况下有一种方法可以允许级联删除?

0 个答案:

没有答案