Pergunta

Usará um SPList objeto derivado de um descarte .OpenWeb() causar erros?

SPList list = null;

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

SPListItemCollection items = list.Items;
Foi útil?

Solução

Não, não haverá erro.Eu normalmente uso esse padrão de design para manter meu using blocos pequenos.

SPList list;

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

SPListItemCollection items = list.Items;

Se você estiver atualizando um SPListItem de uma maneira que exige SPWeb.AllowUnsafeUpdates = true; entretanto, você precisará manter a referência ao SPWeb (ou seja:fazer todo o trabalho no using bloquear.)

Para obter mais informações sobre quando você precisaria definir o AllowUnsafeUpdates propriedade, veja Hristo Pavlov O que você precisa saber sobre AllowUnsafeUpdates.É a melhor explicação que encontrei sobre isso.

Eu faço muito isso para não ter tantos blocos aninhados no meu código.Isso torna tudo muito mais limpo.Depois de recuperar uma lista, ela é armazenada na memória.O mesmo acontece se você usar a lista apenas dentro do seu using bloquear.Se algo mudar entre o momento em que você carrega a lista e o momento em que você solicita um valor (de um item, por exemplo), o valor obtido será o valor que estava presente quando você carregou a lista em primeiro lugar.

É também por isso que se você estiver recebendo apenas algumas listas, você deve usar SPWeb.GetList() em vez de SPWeb.Lists[index]. SPWeb.Lists carrega todas as listas da web na primeira chamada. GetList() faz uma chamada ao banco de dados toda vez, mas se houver muitas listas na web, você carregará muito menos na memória.É uma troca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top