Share via


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

Definição

Carrega os 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 com o 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 um projeto do Entity Framework 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 para Load tem as condições corretas. O RelatedEnd.ValidateLoad método verifica se:

Quando os objetos na coleção já estão carregados no ObjectContext, 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 em 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 foreach loop (For Each...Next no Visual Basic) e chamar condicionalmente o Load método nas EntityReference<TEntity> propriedades e EntityCollection<TEntity> para cada entidade nos resultados.

O Load método carrega objetos relacionados da fonte de dados, seja ou não IsLoadedtrue.

Observação

Quando você chama o Load método durante uma foreach enumeração (C#) ou For Each (Visual Basic), os Serviços de Objetos 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 no 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 enumerar sobre a coleção para carregar objetos referenciados.

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

Aplica-se a