2016-06-03 28 views
0

Sorry, wenn meine Frage ist zu einfach, ich kann nicht herausfinden, dass in dem Code, wenn ich schreibe:Sitecore Kontext welche Datenbank, Master, Web oder Core?

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

Welche Datenbank in diesem Fall entweder Master-Db oder Web Db verwendet wird? In diesem Link "Context Class" heißt es: "Das Context-Objekt enthält Informationen über den aktuellen Status wie aktuelle Datenbank, aktuelle Sprache, aktuelle Domäne usw."

Woher weiß ich, was aktuell ist? z.B. Aktuelle Datenbank

Antwort

1

Sitecore-Daten werden in mehreren Datenbanken gespeichert. Aus der Sicht eines Webentwicklers sind die beiden am häufigsten verwendeten Master, die die Daten enthalten, die im Content Manager bearbeitet werden, und das Web, das die Daten speichert, die zur Anzeige der Website verwendet werden.

Auf Datenbanken kann über die Datenbank-Klasse zugegriffen werden. einen Verweis auf eine Datenbank zu erhalten, verwenden Sie die Factory-Klasse, wie in:

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

Die Datenbanknamen und Implementierungsdetails werden in der web.config unter dem Abschnitt angegeben.

Wenn der Benutzercode von Sitecore aufgerufen wird, wird automatisch eine sogenannte Kontextdatenbank zugewiesen. Sie können diese Datenbank zugreifen, indem Sie die Context-Klasse, wie in:

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

Wenn der Code auf der Website ausführt (dh in einem Layout oder eine xsl-Erweiterung), wird die Kontextdatenbank Web sein. Wenn der Code im Content Manager ausgeführt wird, ist die Kontextdatenbank der Kern. Die Core-Datenbank enthält Daten, die vom Content Manager benötigt werden.

Zugriff auf die Datenbank innerhalb des Content Manager bearbeitet werden, können Sie

Database content = Sitecore.Context.ContentDatabase; 

Die Content Eigenschaft ist leer, verwenden, wenn in der Web-Site Kontext ausgeführt wird. Nur Inhaltseditoren (z. B. der Inhaltsmanager) unterstützen diese Eigenschaft normalerweise.

+0

Code auf der Website wird nicht immer die "Web" -Datenbank verwenden .. wie es in der Website-Definition definiert ist, kann es alles aufgerufen werden. Einige Implementierungen verwenden mehrere Publishing-Ziele für mehrere Datenbanken. – Gatogordo

+0

Ja, ich stimme dir vollkommen zu. –

0

Bei der Kontextdatenbank handelt es sich um eine Site, die aktiv von Ihrer Site oder Ihrem Code abgefragt wird. Für Ihre Website ist die Standarddatenbank in der <site> Definition definiert und wird die "Kontext" -Datenbank für diese Website. Zum Beispiel ist die Datenbank "web" standardmäßig die Kontextdatenbank für die Website-Definition "Website".

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

Sitecore.Context.Database.Name geben Sie den Namen des aktuellen Context-Datenbank.

+0

Dies ist nicht korrekt. Wenn Sie in Sitecore Desktop zwischen Master, Web und Core wechseln, ändern Sie die Inhaltsdatenbank nicht. Kontextdatenbank –

+0

Ja, Sie haben Recht. Ich habe nur versucht, den Unterschied zu illustrieren, aber da das Internet permanent ist, werde ich den Kommentar überarbeiten, um zukünftige Leser nicht zu verwirren. –

0

Die Kontextdatenbank wird durch Ihre Anfrage bestimmt (es gibt einen Datenbankresolver in der Pipeline httprequestbegin), kann aber im Code geändert werden. Dies bedeutet, dass Sie in der Tat nicht verantwortlich sind .. es kann alles sein.

Angenommen, Ihr Code läuft in einem (Sub-) Layout oder Rendering, was wie eine korrekte Annahme aussieht und die schwierigeren Teile als Core-Datenbank überspringt und so weiter. In diesem Fall wird Ihr Kontext durch die Website-Definition bestimmt. In einer Standardkonfiguration wird dies die "Web" -Datenbank sein.Sie können jedoch andere Datenbanken definieren (um mehrere Veröffentlichungsziele zu erstellen) und dann könnte der Name anders sein ("pub" ...).

Im Bearbeitungsmodus kann die Kontextdatenbank jedoch verschiedene Dinge sein. Normalerweise "Master" beim Bearbeiten, "Web" bei der Vorschau ...

So, wie der Name sagt - es hängt alles von dem Kontext ab, in dem der Code ausgeführt wird.

0

Das meiste davon wurde bereits beantwortet, aber die Antwort ist: Es hängt davon ab, welcher Teil von Sitecore ausgeführt wird. Wenn Sie beispielsweise eine Seite in der Vorschau anzeigen, wird standardmäßig die Master-Datenbank verwendet. Wenn Sie jedoch die veröffentlichte Version der Site anzeigen, wird die Webdatenbank verwendet.