¿El uso de un objeto `SPList` derivado de un `.OpenWeb()` eliminado causará errores?

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

  •  10-12-2019
  •  | 
  •  

Pregunta

¿Utilizará un SPList objeto derivado de un desecho .OpenWeb() causar errores?

SPList list = null;

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

SPListItemCollection items = list.Items;
¿Fue útil?

Solución

No, no habrá ningún error.Normalmente uso este patrón de diseño para mantener mi using bloques pequeños.

SPList list;

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

SPListItemCollection items = list.Items;

Si está actualizando un SPListItem de una manera que requiera SPWeb.AllowUnsafeUpdates = true; Sin embargo, deberá mantener la referencia al SPWeb (ES DECIR:hacer todo el trabajo en el using bloquear.)

Para obtener más información sobre cuándo necesitaría configurar el AllowUnsafeUpdates propiedad, ver Hristo Pavlov Lo que necesita saber sobre AllowUnsafeUpdates.Es la mejor explicación que he encontrado al respecto.

Hago esto con frecuencia para no tener tantos bloques anidados en mi código.Lo hace mucho más limpio.Una vez que recupera una lista, se almacena en la memoria.Lo mismo es cierto si usa la lista sólo dentro de su using bloquear.Si algo cambia entre el momento en que carga la lista y el momento en que solicita un valor (de un elemento, por ejemplo), el valor que obtiene es el valor que estaba presente cuando cargó la lista en primer lugar.

Esta es también la razón por la que si solo obtienes un par de listas, debes usar SPWeb.GetList() en lugar de SPWeb.Lists[index]. SPWeb.Lists carga todas las listas en la web en la primera llamada. GetList() realiza una llamada a la base de datos cada vez, pero si hay muchas listas en la web, estás cargando mucho menos en la memoria.Es una compensación.

Licenciado bajo: CC-BY-SA con atribución
scroll top