Compartilhar via


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 no 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 SalesOrderHeader relacionados para a entidade Contact.

// 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 RelatedEnd.ValidateLoad interno antes de carregar a coleção, o que valida que uma chamada para Load tem as condições corretas. O método RelatedEnd.ValidateLoad verifica se:

Quando os objetos na coleção já são carregados no ObjectContext, o método Load impõe a MergeOption especificada pelo parâmetro mergeOption. 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 método Load no final relacionado retornado pela propriedade de navegação. Para uma relação um-para-muitos, chame o método Load 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 loop foreach (For Each...Next no Visual Basic) e chamar condicionalmente o método Load em propriedades EntityReference<TEntity> e EntityCollection<TEntity> para cada entidade nos resultados.

O método Load carrega objetos relacionados da fonte de dados se IsLoaded está ou não true.

Nota

Quando você chama o método Load durante uma enumeração foreach (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 coleção de List<T>. Isso fecha o leitor de dados e permite que você enumere na coleção para carregar objetos referenciados.

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

Aplica-se a