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

时间:2016-06-03 06:24:52

标签: sitecore sitecore7

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

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

在这种情况下使用哪个数据库,Master Db还是Web Db?在此链接中,“Context Class”表示“Context对象包含有关当前状态的信息,例如当前数据库,当前语言,当前域等”。

我如何知道当前的情况?例如当前数据库

4 个答案:

答案 0 :(得分:2)

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

可以通过Database类访问数据库。 要获取对数据库的引用,请使用Factory类,如:

import java.awt.*;
import java.util.Arrays;
import javax.swing.*;

public class Test2 {
  public JComponent makeUI() {
    JPanel p = new JPanel(new GridLayout(2, 1));
      p.add(makePanel("Default ButtonGroup", new ButtonGroup()));
      p.add(makePanel("Custom ButtonGroup", new ButtonGroup() {
          private ButtonModel prevModel;
          private boolean isAdjusting = false;
          @Override public void setSelected(ButtonModel m, boolean b) {
              if (isAdjusting) {
                  return;
              }
              if (m.equals(prevModel)) {
                  isAdjusting = true;
                  clearSelection();
                  isAdjusting = false;
              } else {
                  super.setSelected(m, b);
              }
              prevModel = getSelection();
          }
      }));
    return p;
  }
  private JComponent makePanel(String title, ButtonGroup g) {
    JPanel p = new JPanel();
    p.setBorder(BorderFactory.createTitledBorder(title));
    for (String s: Arrays.asList("aaa", "bbb", "ccc")) {
      AbstractButton r = new JRadioButton(s);
      //AbstractButton r = new JToggleButton(s);
      p.add(r);
      g.add(r);
    }
    return p;
  }
  public static void main(String... args) {
    EventQueue.invokeLater(() -> {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.getContentPane().add(new Test2().makeUI());
      f.setSize(320, 240);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
    });
  }
}

数据库名称和实现细节在该部分下面的web.config中指定。

每当Sitecore调用用户代码时,都会自动分配一个所谓的上下文数据库。您可以使用Context类访问此数据库,如:

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

当代码在网站上执行时(即布局或xsl扩展名),上下文数据库将是web。当代码在Content Manager中执行时,上下文数据库将是核心。核心数据库包含Content Manager所需的数据。

要访问Content Manager中正在编辑的数据库,您可以使用

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

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

答案 1 :(得分:0)

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

  

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

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

答案 2 :(得分:0)

上下文数据库由您的请求决定(httprequestbegin管道中有一个databaseresolver),但可以在代码中更改。这意味着你的问题实际上是不负责任的......它可以是任何东西。

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

但是,在编辑模式下,上下文数据库可以是不同的东西。通常&#34;主人&#34;在编辑时,&#34; web&#34;预览时......

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

答案 3 :(得分:0)

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