通过代码删除 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 页面因添加了个性化等内容而略有不同。
我想知道删除 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 页面因添加了个性化等内容而略有不同。