Verursacht die Verwendung eines „SPList“-Objekts, das von einem entsorgten „.OpenWeb()“ abgeleitet ist, Fehler?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/54486

  •  10-12-2019
  •  | 
  •  

Frage

Wird mit a SPList Von einem entsorgten Objekt abgeleitetes Objekt .OpenWeb() Fehler verursachen?

SPList list = null;

using (SPWeb web = SPContext.Current.Site.OpenWeb("/myweb")){
    list = web.Lists["Awesome Name"];
}

SPListItemCollection items = list.Items;
War es hilfreich?

Lösung

Nein, es wird kein Fehler auftreten.Ich verwende dieses Designmuster häufig, um meine zu behalten using Blöcke klein.

SPList list;

using (SPWeb web = SPContext.Current.Site.OpenWeb("myweb"))
{
    list = web.GetList("/myweb/Lists/Awesome Name");
}

SPListItemCollection items = list.Items;

Wenn Sie eine aktualisieren SPListItem auf eine Art und Weise, die es erfordert SPWeb.AllowUnsafeUpdates = true; Sie müssen jedoch den Verweis auf beibehalten SPWeb (DH:Erledige die ganze Arbeit in der using Block.)

Weitere Informationen dazu, wann Sie das festlegen müssen AllowUnsafeUpdates Eigentum, siehe Hristo Pavlovs Was Sie über AllowUnsafeUpdates wissen müssen.Das ist die beste Erklärung, die ich dazu gefunden habe.

Ich mache das oft, damit mein Code nicht so viele verschachtelte Blöcke enthält.Es macht es viel sauberer.Sobald Sie eine Liste abrufen, wird sie im Speicher abgelegt.Das Gleiche gilt, wenn Sie die Liste nur innerhalb Ihres verwenden using Block.Wenn sich zwischen dem Laden der Liste und dem Anfordern eines Werts (z. B. von einem Element) etwas ändert, erhalten Sie den Wert, der beim ersten Laden der Liste vorhanden war.

Dies ist auch der Grund, warum Sie diese verwenden sollten, wenn Sie nur ein paar Listen erhalten SPWeb.GetList() anstatt SPWeb.Lists[index]. SPWeb.Lists lädt beim ersten Aufruf alle Listen im Web. GetList() führt jedes Mal einen Datenbankaufruf durch, aber wenn es viele Listen im Web gibt, wird viel weniger in den Speicher geladen.Es ist ein Kompromiss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top