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 los objetos relacionados en la colección con la opción de fusión mediante 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 devueltos de consultas anteriores realizadas en el mismo ObjectContext.
Ejemplos
Este ejemplo se basa en el modelo Adventure Works Sales. Para ejecutar el código de este ejemplo, debe haber agregado ya el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para que use 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 interno RelatedEnd.ValidateLoad
antes de cargar la colección, que valida que una llamada a Load tiene las condiciones correctas. El RelatedEnd.ValidateLoad
método comprueba que:
- Existe un valor válido ObjectContext .
- La entidad no está en un Deleted estado.
- MergeOption para Load debe ser NoTracking si y solo si la entidad de origen era NoTracking. Si la entidad de origen se recuperó con cualquier otro MergeOption, LoadMergeOption puede ser cualquier cosa pero NoTracking (por ejemplo, la entidad podría haberse cargado con OverwriteChanges y la Load opción puede ser AppendOnly).
- Si
mergeOption
es NoTracking, Load no se llama a en una entidad ya cargada y Load no se llama a en un no vacío y no se realiza RelatedEndel seguimiento de .
Cuando los objetos de la colección ya se cargan en ObjectContext, el Load método aplica el MergeOption especificado por el mergeOption
parámetro . 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 Load
método en el extremo relacionado devuelto por la propiedad de navegación. Para una relación uno a varios, llame al Load método en EntityCollection<TEntity>. Para una relación uno a uno, llame a Load en EntityReference<TEntity>. Esto carga los datos de objetos relacionados en el contexto del objeto. Puede enumerar a través de la colección de resultados devueltos mediante un foreach
bucle (For Each...Next
en Visual Basic) y llamar condicionalmente al Load
método en EntityReference<TEntity> y EntityCollection<TEntity> propiedades para cada entidad en los resultados.
El Load método carga objetos relacionados desde el origen de datos, independientemente de si es true
o no IsLoaded .
Nota
Cuando se llama al método Load durante una enumeración foreach
(C#) o For Each
(Visual Basic), Servicios de objeto intenta abrir un nuevo lector de datos. Si no ha especificado multipleactiveresultsets=true
en la cadena de conexión para habilitar varios conjuntos de resultados activos, se producirá un error durante esta operación. También puede cargar el resultado de la consulta en una colección List<T>. Esto cierra el lector de datos y permite llevar a cabo la enumeración en la colección para cargar los objetos a los que se hace referencia.
El método EntityCollection<TEntity>.Load se sincroniza con el método EntityReference<TEntity>.Load.
Se aplica a
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de