EntityCollection<TEntity>.Load(MergeOption) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Carrega objetos relacionados na coleção, usando a opção de fusão 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 desta coleção devem ser fundidos com os objetos que possam ter sido devolvidos de consultas anteriores contra o mesmo ObjectContext.
Exemplos
Este exemplo baseia-se no Modelo de Vendas da Adventure Works. Para executar o código neste exemplo, deve já ter adicionado o AdventureWorks Sales Model ao seu projeto e configurado o seu projeto para usar o Entity Framework. Para isso, complete os procedimentos em Como: Configurar manualmente um Entity Framework Project e Como: Definir manualmente o modelo e os ficheiros de 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()));
}
}
}
Observações
Este 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 que:
- Existe um válido ObjectContext .
- A entidade não está num Deleted estado.
- MergeOption para Load deve ser NoTracking se e só se a entidade fonte fosse NoTracking. Se a entidade de origem foi recuperada com qualquer outra MergeOption, pode LoadMergeOption ser qualquer coisa menos NoTracking (por exemplo, a entidade poderia ter sido carregada com OverwriteChanges e a Load opção pode ser AppendOnly).
- Se for , não é chamado numa entidade já carregada e Load não é chamado numa entidade não vazia, não rastreada RelatedEnd. LoadNoTracking
mergeOption
Quando os objetos na coleção já estão carregados no ObjectContext, o Load método aplica 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, deve chamar o Load método na extremidade relacionada devolvido pela propriedade de navegação. Para uma relação um-para-muitos, chame o Load método em EntityCollection<TEntity>. Para uma relação individual, ligue o LoadEntityReference<TEntity>. Isto carrega os dados relacionados do objeto no contexto do objeto. Pode enumerar através da coleção de resultados devolvidos usando um ciclo foreach (For Each...Next em Visual Basic) e chamar condicionalmente o método Load em EntityReference<TEntity> e EntityCollection<TEntity> propriedades para cada entidade nos resultados.
O Load método carrega objetos relacionados a partir da fonte de dados, seja ou trueIsLoaded não .
Note
Quando chama o método Load durante uma enumeração foreach (C#) ou For Each (Visual Basic), o Object Services tenta abrir um novo leitor de dados. Esta operação falhará a menos que tenha ativado vários conjuntos de resultados ativos especificando multipleactiveresultsets=true no cadeia de ligação. Também pode carregar o resultado da consulta numa List<T> coleção. Isto fecha o leitor de dados e permite-lhe enumerar sobre a coleção para carregar objetos referenciados.
O EntityCollection<TEntity>.Load método está sincronizado com o EntityReference<TEntity>.Load método.