EntityCollection<TEntity>.Load(MergeOption) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定されたマージ オプションを使用して、コレクションに関連オブジェクトを読み込みます。
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 Model が使用されています。 この例のコードを実行するには、あらかじめプロジェクトに AdventureWorks Sales Model を追加し、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 は Load 、 NoTracking ソース エンティティが の NoTracking場合にのみ である必要があります。 ソース エンティティが他 MergeOptionの と共に取得された場合は、 LoadMergeOption 以外の NoTracking 任意の値を指定できます (たとえば、エンティティは で OverwriteChanges 読み込まれ、オプションは Load にできます AppendOnly)。
- が NoTrackingLoad の場合
mergeOption
、 は既に読み込まれているエンティティLoadでは呼び出されず、空ではない追跡されていない で呼び出されませんRelatedEnd。
コレクション内のオブジェクトが に既に読み込ObjectContextまれている場合、 メソッドは Load パラメーターで指定された をMergeOptionmergeOption
適用します。 詳しくは、「ID 解決、状態管理、および変更の追跡」をご覧ください。
関連オブジェクトを明示的に読み込むには、ナビゲーション プロパティによって返される関連する末尾で メソッドを呼び出す Load
必要があります。 一対多リレーションシップの場合は、 で EntityCollection<TEntity>メソッドをLoad呼び出します。 一対一リレーションシップの場合は、 で EntityReference<TEntity>をLoad呼び出します。 これにより、関連オブジェクト データがオブジェクト コンテキストに読み込まれます。 返された結果のコレクションを列挙するには、ループ (For Each...Next
Visual Basic の場合) を使用foreach
し、結果内の各エンティティの EntityReference<TEntity> メソッドと EntityCollection<TEntity> プロパティを条件付きで呼び出Load
すことができます。
メソッドはLoad、 が であるかどうかに関係なくIsLoadedtrue
、データ ソースから関連オブジェクトを読み込みます。
注意
Load (C#) または foreach
(Visual Basic) 列挙で、For Each
メソッドを呼び出すと、Object Services は新たにデータ リーダーを開こうとします。 この操作は、接続文字列で multipleactiveresultsets=true
を指定して複数のアクティブな結果セットを有効にしていない限り失敗します。 クエリの結果は、List<T> コレクションに読み込むこともできます。 この場合、データ リーダーが閉じ、コレクションを列挙して参照オブジェクトを読み込むことができます。
EntityCollection<TEntity>.Load メソッドは EntityReference<TEntity>.Load メソッドと同期しています。
適用対象
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示