通过代码删除 Sitefinity 中所有页面的最佳方法是什么?

What is the best way to delete all pages in Sitefinity via code?

我想知道删除 Sitefinity 中所有页面的最佳方法是什么? 我想出了两个解决方案,但我不确定最佳做法是什么。 我还阅读了删除页面前的 documentation。 目标也是删除分层页面。

流利

 var fluent = App.WorkWith().Pages(); 
 fluent.LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend).Delete().SaveChanges();

原生

var pageManager = PageManager.GetManager();
var pageNodes = pageManager.GetPageNodes().ToList();
foreach (var node in pageNodes)
{
   pageManager.DeleteItem(node);
}

pageManager.SaveChanges();

P.S。我使用的是 Fluent 方法,但一段时间后开始弹出错误。我切换到 PageManager 方法,但我得到了同样的错误。我把后台和回收站里的所有页面都删了,还是没有解决。

No row for Telerik.Sitefinity.Pages.Model.PageNode ('sf_page_node') GenericOID@4f0f7ba8 PageNode id=6bd454ba-6971-4289-822d-36fbd9f5a844 NOTRES

编辑:尽管有错误,页面仍被删除。

走哪条路并不重要(流利与原生)- 最终结果应该是相同的。这只是编码风格和可读性的问题。

我更喜欢Native,因为我觉得我有更多的控制权:)

至于错误 - 使用 PageManager 时 - 你试过了吗

pageManager.Delete(node) 相对于 pageManager.DeleteItem(node)?

它们看起来略有不同。

你要删除多少页?

如果他们是几千,你可以添加一个计数器并在每 100 次左右的删除时调用 pageManager.SaveChanges() 以便将事务提交到数据库。

您在删除页面时应该非常具体,因为您使用的本机版本会提取所有页面,包括 BackendPages。我之前删除了 Sitefinity 网站中的 ALL 个页面。

根据文档,他们使用略有不同的方法来删除页面。

https://docs.sitefinity.com/for-developers-delete-pages#delete-a-page-using-native-api

这按标题删除,但可以轻松修改以适合您。文档还建议在删除之前取消发布页面。

public void DeletePageNativeAPI(string pageTitleToDelete)
        {
            PageManager pageManager = PageManager.GetManager();
            PageData page = pageManager.GetPageDataList().Where(pD => (pD.NavigationNode.Title == pageTitleToDelete && pD.Status == ContentLifecycleStatus.Live)).FirstOrDefault();

            if (page != null)
            {
                pageManager.Delete(page);
                pageManager.SaveChanges();
            }
        }

页面由模板 > 页面节点 > 页面数据组成 https://docs.sitefinity.com/for-developers-crud-operations-with-pages#page-components

根据您使用的版本,Sitefinity 页面因添加了个性化等内容而略有不同。