EntityCollection<TEntity>.Load(MergeOption) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Загружает связанные объекты в коллекцию с помощью указанного параметра слияния.
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)
Параметры
- mergeOption
- MergeOption
Указывает, как объекты в этой коллекции должны быть объединены с объектами, которые могли быть возвращены из предыдущих запросов к одному и тому же ObjectContext.
Примеры
Этот пример основан на модели Adventure Works Sales. Чтобы запустить код в этом примере, необходимо добавить модель продаж AdventureWorks в проект и настроить проект для использования Entity Framework. Для этого выполните процедуры в How to: Вручную настройте entity Framework Project и How to: Manually Define the Model and Mapping Files.
В этом примере загружаются связанные SalesOrderHeader объекты для сущности 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()));
}
}
}
Комментарии
Этот метод вызывает внутренний RelatedEnd.ValidateLoad метод перед загрузкой коллекции, которая проверяет, что вызов Load имеет правильные условия. Метод RelatedEnd.ValidateLoad проверяет, что:
- Допустимая ObjectContext существует.
- Сущность не в Deleted состоянии.
- MergeOption Load значение должно быть, если и только NoTracking в том случае, если исходная сущность былаNoTracking. Если исходная сущность была получена с любым другим MergeOption, LoadMergeOption может быть что-либо, но NoTracking (например, сущность могла быть загружена и OverwriteChangesLoad параметр может быть AppendOnly).
- Если
mergeOptionэто NoTrackingтак, Load не вызывается для уже загруженной сущности и Load не вызывается для непустой, не отслеживаемой RelatedEnd.
Когда объекты в коллекции уже загружены ObjectContextв коллекцию, Load метод применяет MergeOption указанный параметром mergeOption . Дополнительные сведения см. статью «Разрешение удостоверений», «Управление состоянием» и «Отслеживание изменений».
Чтобы явно загрузить связанные объекты, необходимо вызвать Load метод в связанном конце, возвращаемом свойством навигации. Для связи "один ко многим" вызовите Load метод в EntityCollection<TEntity>. Для связи "один к одному" вызовите этот Load параметр EntityReference<TEntity>. При этом данные связанных объектов загружаются в контекст объекта. Вы можете перечислить коллекцию возвращаемых результатов с помощью цикла foreach (For Each...Next в Visual Basic) и условного вызова метода Load для EntityReference<TEntity> и свойств EntityCollection<TEntity> для каждой сущности в результатах.
Метод Load загружает связанные объекты из источника данных независимо от того, является ли IsLoadedон.true
Note
При вызове Load метода во время foreach перечисления (C#) или For Each (Visual Basic) службы объектов пытаются открыть новое средство чтения данных. Эта операция завершится ошибкой, если вы не включили несколько активных наборов результатов, указав multipleactiveresultsets=true в строке подключения. Вы также можете загрузить результат запроса в коллекцию List<T> . Это закрывает средство чтения данных и позволяет перечислить коллекцию для загрузки ссылочных объектов.
Метод EntityCollection<TEntity>.Load синхронизируется с методом EntityReference<TEntity>.Load .