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 Sales и настроить его для использования платформы Entity Framework. Для этого выполните процедуры, описанные в разделах Практическое руководство. Настройка проекта Entity Framework вручную и Практическое руководство. Определение модели и файлов сопоставления вручную.

В этом примере загружаются связанные объекты 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 параметр for Load должен иметь значение NoTracking , если и только в том случае, если исходная сущность была NoTracking. Если исходная сущность была получена с помощью любого другого MergeOptionMergeOptionLoadобъекта , может быть любым, кроме NoTracking (например, сущность могла быть загружена с OverwriteChanges , а Load параметр может иметь значение ).AppendOnly
  • Если mergeOption имеет значение NoTracking, Load метод не вызывается для уже загруженной сущности и Load не вызывается для непустой, не отслеживаемой сущности RelatedEnd.

Если объекты в коллекции уже загружены в ObjectContext, Load метод принудительно применяет заданный MergeOptionmergeOption параметром . Дополнительные сведения см. в разделе Разрешение удостоверений, Управление состоянием и Отслеживание изменений.

Чтобы явно загрузить связанные объекты, необходимо вызвать Load метод в связанном конце, возвращаемом свойством навигации. Для связи "один ко многим" вызовите метод в LoadEntityCollection<TEntity>. Для связи "один к одному" вызовите в LoadEntityReference<TEntity>. В результате данные связанного объекта будут загружены в контекст объекта. Можно выполнить перечисление через коллекцию возвращаемых результатов с помощью foreach цикла (For Each...Next в Visual Basic) и условно вызвать Load метод в EntityReference<TEntity> свойствах и EntityCollection<TEntity> для каждой сущности в результатах.

Метод Load загружает связанные объекты из источника данных независимо от того, является ли IsLoaded метод true.

Примечание

Если метод Load вызывается во время перечисления foreach (C#) или For Each (Visual Basic), службы объектов пытаются открыть новый модуль чтения данных. Эта операция завершится ошибкой, если не был включен режим MARS путем задания multipleactiveresultsets=true в строке соединения. Кроме того, можно загрузить результат запроса в коллекцию List<T>. В результате модуль чтения данных будет закрыт, и появится возможность выполнять перечисление по коллекции для загрузки объектов, на которые существуют ссылки.

Метод EntityCollection<TEntity>.Load синхронизирован с методом EntityReference<TEntity>.Load.

Применяется к