EntityCollection<TEntity>.Load(MergeOption) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
- Existe um válido ObjectContext .
- A entidade não está em um Deleted estado .
- MergeOption for Load deverá ser NoTracking se e somente se a entidade de origem for NoTracking. Se a entidade de origem foi recuperada com qualquer outra MergeOption, o LoadMergeOption pode ser qualquer coisa, mas NoTracking (por exemplo, a entidade poderia ter sido carregada com OverwriteChanges e a opção Load pode ser AppendOnly).
- Se
mergeOption
for NoTracking, Load não será chamado em uma entidade já carregada e Load não será chamado em um não vazio, sem rastreamento RelatedEnd.
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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de