很抱歉,如果我的问题太基础了,我在编写代码时无法弄清楚:
var myItem = Sitecore.Context.Database.GetItem("....");
在这种情况下使用哪个数据库,Master Db还是Web Db?在此链接中,“Context Class”表示“Context对象包含有关当前状态的信息,例如当前数据库,当前语言,当前域等”。
我如何知道当前的情况?例如当前数据库
答案 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数据库。