EntityCollection<TEntity>.Load(MergeOption) Método

Definição

Carrega objetos relacionados na coleção usando a opção de mesclagem especificada.

public:
 override void Load(System::Data::Objects::MergeOption mergeOption);
public override void Load(System.Data.Objects.MergeOption mergeOption);
override this.Load : System.Data.Objects.MergeOption -> unit
Public Overrides Sub Load (mergeOption As MergeOption)

Parâmetros

mergeOption
MergeOption

Especifica como os objetos nesta coleção devem ser mesclados com os objetos que podem ter sido retornados de consultas anteriores em relação ao mesmo ObjectContext.

Exemplos

Este exemplo é baseado no Modelo de Vendas da Adventure Works. Para executar o código neste exemplo, você já deve ter adicionado o Modelo de Vendas AdventureWorks ao seu projeto e configurado seu projeto para usar o Entity Framework. Para fazer isso, conclua os procedimentos em Como configurar manualmente uma estrutura de entidade Project e Como definir manualmente os arquivos de modelo e mapeamento.

Este exemplo carrega os objetos relacionados SalesOrderHeader para a Contact entidade.

// Specify the customer ID.
int contactID = 4332;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    context.ContextOptions.LazyLoadingEnabled = false;

    // Get a specified customer by contact ID.
    var contact =
        (from c in context.Contacts
         where c.ContactID == contactID
         select c).First();

    // Load the orders for the customer explicitly.
    if (!contact.SalesOrderHeaders.IsLoaded)
    {
        contact.SalesOrderHeaders.Load();
    }

    foreach (SalesOrderHeader order in contact.SalesOrderHeaders)
    {
        // Load the items for the order if not already loaded.
        if (!order.SalesOrderDetails.IsLoaded)
        {
            order.SalesOrderDetails.Load();
        }

        Console.WriteLine(String.Format("PO Number: {0}",
            order.PurchaseOrderNumber));
        Console.WriteLine(String.Format("Order Date: {0}",
            order.OrderDate.ToString()));
        Console.WriteLine("Order items:");
        foreach (SalesOrderDetail item in order.SalesOrderDetails)
        {
            Console.WriteLine(String.Format("Product: {0} "
                + "Quantity: {1}", item.ProductID.ToString(),
                item.OrderQty.ToString()));
        }
    }
}

Comentários

Esse método chama o método interno RelatedEnd.ValidateLoad antes de carregar a coleção, o que valida que uma chamada Load tem as condições corretas. O RelatedEnd.ValidateLoad método verifica se:

Quando os objetos na coleção já são carregados no ObjectContextmétodo, o Load método impõe o MergeOption especificado pelo mergeOption parâmetro. Para obter mais informações, consulte Resolução de Identidade, Gerenciamento de Estado e Controle de Alterações.

Para carregar explicitamente objetos relacionados, você deve chamar o Load método na extremidade relacionada retornada pela propriedade de navegação. Para uma relação um-para-muitos, chame o Load método em EntityCollection<TEntity>. Para uma relação um-para-um, chame o Load on EntityReference<TEntity>. Isso carrega os dados de objeto relacionados no contexto do objeto. Você pode enumerar por meio da coleção de resultados retornados usando um loop foreach (For Each...Next em Visual Basic) e chamar condicionalmente o método Load em propriedades EntityReference<TEntity> e EntityCollection<TEntity> para cada entidade nos resultados.

O Load método carrega objetos relacionados da fonte de dados.IsLoadedtrue

Note

Quando você chama o Load método durante uma foreach enumeração (C#) ou For Each (Visual Basic), os Serviços de Objeto tentam abrir um novo leitor de dados. Essa operação falhará, a menos que você tenha habilitado vários conjuntos de resultados ativos especificando multipleactiveresultsets=true na cadeia de conexão. Você também pode carregar o resultado da consulta em uma List<T> coleção. Isso fecha o leitor de dados e permite que você enumere na coleção para carregar objetos referenciados.

O EntityCollection<TEntity>.Load método é sincronizado com o EntityReference<TEntity>.Load método.

Aplica-se a