Sitecore Context 使用哪个数据库,Master,web 还是 core?

Sitecore Context use which database, Master, web or core?

抱歉,如果我的问题太基础了,我写的时候无法在代码中弄清楚:

var myItem = Sitecore.Context.Database.GetItem("....");

在这种情况下使用哪个数据库,Master Db 还是 Web Db?在这个link,“Context Class”里面写着,"The Context object holds information about the current state such as current database, current language, current domain etc."

我怎么知道什么是最新的?例如当前数据库

上下文数据库是您的网站或代码主动查询的数据库。对于您的网站,默认数据库在 <site> 定义中定义,并成为该站点的 "context" 数据库。例如,默认情况下,"web" 数据库是 "Website" 站点定义的上下文数据库。

<site name="website" database="web" ...../>

Sitecore.Context.Database.Name 将为您提供当前 Context 数据库的名称。

Sitecore 数据存储在多个数据库中。从 Web 开发人员的角度来看,最常用的两个是 master,它包含在 Content Manager 中编辑的数据,以及 web,它存储用于显示网站的数据。

可以通过数据库 class 访问数据库。 要获取对数据库的引用,请使用工厂 class,如:

 Sitecore.Data.Database master =  
    Sitecore.Configuration.Factory.GetDatabase("master");

数据库名称和实现细节在本节下方的 web.config 中指定。

只要 Sitecore 调用用户代码,就会自动分配一个所谓的上下文数据库。您可以使用上下文 class 访问此数据库,如:

Sitecore.Data.Database current = Sitecore.Context.Database;

当代码在网站上执行时(即在布局或 xsl 扩展中),上下文数据库将是 web。当代码在内容管理器中执行时,上下文数据库将成为核心。核心数据库包含内容管理器所需的数据。

要访问正在内容管理器中编辑的数据库,您可以使用

Database content = Sitecore.Context.ContentDatabase;

在网站上下文中执行时,ContentDatabase 属性 将为空。只有内容编辑器(例如内容管理器)通常会支持此 属性。

上下文数据库由您的请求决定(httprequestbegin 管道中有一个数据库解析器),但可以在代码中更改。这意味着您的问题实际上是无法回答的……可以是任何问题。

让我们假设您的代码是 运行 在(子)布局或渲染中,这似乎是一个正确的假设,并跳过核心数据库等更棘手的部分。在这种情况下,您的上下文将由站点定义决定。在标准设置中,这将是 "web" 数据库。但是您可以定义其他数据库(以创建多个发布目标),然后名称可以不同("pub" ...)。

然而,在编辑模式下,上下文数据库可以是不同的东西。通常编辑时"master",预览时"web"...

因此,正如名称所述 - 这完全取决于您的代码所在的上下文 运行。

其中大部分已经得到解答,但答案是:这取决于正在执行的 Sitecore 的哪一部分。 例如,如果您正在预览页面,默认情况下将使用 master 数据库。但是,如果您查看的是网站的发布版本,那么它将使用网络数据库。