Sitefinity 数据库中的内容存储在哪里?

Where in the Sitefinity database is content stored?

经过数小时的艰苦分析和纯粹的猜测,我已经成功地将 1,000 条新闻和其他内容从 Sitefinity 5 迁移到 Wordpress,但仍有一些项目遗留下来。具体页面。我知道很多内容都以非常晦涩的方式存储,但必须有人以前做过这件事并且可以引导我朝着正确的方向前进。

我的研究(以及 text-search 针对数据库的研究)找到了页面标题等,但是当我搜索内容时,我一无所获。我的直觉告诉我内容是以二进制形式存储的,任何人都可以确认是否是这种情况?

Sitefinity 文档仅在您是在 Visual Studio 中设置站点的 .net 开发人员时才有用(据我所知)。

这可能是我遇到过的最模糊的内容存储方式。在对数据库执行文本搜索后,我终于找到了内容的存储位置,但要将其取出来并不是一个简单的过程。

页面的主记录似乎是 sf_page_node,有相关的 tables:

  • sf_object_data(page_id 与 sf_page_node.content_id 相关)
  • sf_draft_pages(page_id 与 sf_page_node.content_id 相关)
  • sf_page_data(content_id 与 sf_page_node.content_id 相关)
  • sf_control_properties(control_id 与 sf_object_data.id 相关)

因此您可以通过这样的查询获得所需的信息:

select * from 
[sf_page_node]
join sf_object_data on sf_page_node.content_id = sf_object_data.page_id
join sf_control_properties on sf_object_data.id = sf_control_properties.control_id

其他需要考虑的事项:

  • parent_id 字段与 sf_page_node table 相关,因此如果您正在编写脚本,请务必也查询此字段
  • 该页面可能有一个横幅图像,您将选择 "place_holder" 值作为 'BannerHolder' 并带有 "Image" 的标题 该图像可能作为 blob 存储在 sf_media_content,你应该单独处理这个。 'ImageId' 的 "nme" 值将在 "val" 列中有一个 GUID。您可以使用此值查询 sf_media_content 作为 "content_id" 实际二进制数据存储在 sf_chunks 中,它们与 "file_id"
  • 相关

考虑到我需要迁移的内容,我修改后的查询如下:

select 
    original.content_id,
    original.url_name_,
    original.title_,
    parent.id,
    parent.url_name_,
    parent.title_,
    place_holder,
    sf_object_data.caption_,
    sf_control_properties.nme,
    val
from [sf_page_node] original
join sf_object_data on original.content_id = sf_object_data.page_id
join sf_control_properties on sf_object_data.id = sf_control_properties.control_id
join sf_page_node parent on original.parent_id = parent.id

希望对大家有所帮助!

在这种情况下您不需要版本项 - 正如您已经发现的那样,它以二进制格式存储以前版本的页面。

sf_control_properties 和 sf_object_data 表中提供了当前活动页面的数据。您需要将这些与 sf_page_data 和 sf_page_node 结合在一起,您将获得全貌。

根据您的要求,对每个页面执行 GET 请求并解析返回的 html 响应可能更容易。