我想知道删除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 方法,但我得到了同样的错误。我删除了后端和回收站中的所有页面,但仍无法解决。
Telerik.Sitefinity.Pages.Model.PageNode(' sf_page_node')没有行 GenericOID @ 4f0f7ba8 PageNode id = 6bd454ba-6971-4289-822d-36fbd9f5a844 NOTRES
编辑:尽管出现错误,页面仍会被删除。
答案 0 :(得分:0)
你走哪条路(Fluent vs Native)并不重要 - 最终结果应该是一样的。这只是编码风格和可读性的问题。
我更喜欢Native,因为我觉得我有更多的控制权。)
至于错误 - 使用PageManager时 - 你试过吗
pageManager.Delete(节点)而不是pageManager.DeleteItem(节点)?
它们似乎略有不同。
您要删除多少页?
如果它们是数千个,您可以添加一个计数器并在每100次删除时调用pageManager.SaveChanges(),以便将事务提交给DB。
答案 1 :(得分:0)
删除页面时应该非常具体,因为您使用的本机版本将拉取包括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();
}
}
页面由模板>组成。 PageNode> PageData https://docs.sitefinity.com/for-developers-crud-operations-with-pages#page-components
由于添加了Personalization等,因此您使用Sitefinity页面的版本会有所不同。