EntityCollection<TEntity>.Load(MergeOption) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Carga objetos relacionados en la colección mediante la opción de combinación 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 cómo se deben combinar los objetos de esta colección con los objetos que podrían haberse devuelto de las consultas anteriores en el mismo ObjectContext.
Ejemplos
Este ejemplo se basa en el modelo de ventas de Adventure Works. Para ejecutar el código en este ejemplo, debe haber agregado el modelo de ventas de AdventureWorks al proyecto y configurado el proyecto para usar Entity Framework. Para ello, complete los procedimientos de Cómo: Configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente los archivos de modelo y asignación.
En este ejemplo se cargan los objetos SalesOrderHeader
relacionados para la entidad 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()));
}
}
}
Comentarios
Este método llama al método RelatedEnd.ValidateLoad
interno antes de cargar la colección, que valida que una llamada a Load tenga las condiciones correctas. El método RelatedEnd.ValidateLoad
comprueba que:
- Existe un ObjectContext válido.
- La entidad no está en un estado de Deleted.
- MergeOption para Load debe ser NoTracking si y solo si la entidad de origen se NoTracking. Si la entidad de origen se recuperó con cualquier otro MergeOption, el LoadMergeOption puede ser cualquier cosa, pero NoTracking (por ejemplo, la entidad podría haberse cargado con OverwriteChanges y la opción Load puede ser AppendOnly).
- Si
mergeOption
es NoTracking, no se llama a Load en una entidad ya cargada y no se llama a Load en un RelatedEndno vacío y sin seguimiento .
Cuando los objetos de la colección ya se cargan en el ObjectContext, el método Load aplica el MergeOption especificado por el parámetro mergeOption
. Para obtener más información, consulte resolución de identidades, administración de estado y seguimiento de cambios.
Para cargar explícitamente objetos relacionados, debe llamar al método Load
en el extremo relacionado devuelto por la propiedad de navegación. Para una relación uno a varios, llame al método Load en EntityCollection<TEntity>. Para una relación uno a uno, llame al Load en EntityReference<TEntity>. Esto carga los datos del objeto relacionados en el contexto del objeto. Puede enumerar a través de la colección de resultados devueltos mediante un bucle foreach
(For Each...Next
en Visual Basic) y llamar condicionalmente al método Load
en EntityReference<TEntity> y propiedades EntityCollection<TEntity> para cada entidad en los resultados.
El método Load carga objetos relacionados desde el origen de datos tanto si IsLoaded como si true
.
Nota
Cuando se llama al método Load durante una enumeración de foreach
(C#) o For Each
(Visual Basic), Object Services intenta abrir un nuevo lector de datos. Esta operación producirá un error a menos que haya habilitado varios conjuntos de resultados activos especificando multipleactiveresultsets=true
en la cadena de conexión. También puede cargar el resultado de la consulta en una colección List<T>. Esto cierra el lector de datos y permite enumerar sobre la colección para cargar objetos a los que se hace referencia.
El método EntityCollection<TEntity>.Load se sincroniza con el método EntityReference<TEntity>.Load.