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.
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по