リレーション
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
リレーションは、エンティティ同士をリンクするために使用されます。このページでは、リレーションとその値を取得する方法とそれらの値を変更する方法について説明します。
リレーション タイプ
リレーション タイプ
M には、次の 4 つの主要なリレーション タイプがあります。
IChildToOneParentRelationIChildToManyParentsRelationIParentToOneChildRelationIParentToManyChildrenRelation
これらは最も厳密に型指定されたインターフェイスであり、ほとんどの場合に使用が推奨されます。ただし、次のインターフェイスからも派生します (適切な場合)。
IChildRelationIParentRelationIToOneRelationIToManyRelationIRelation
これらのインターフェイスは、多型に使用したり、型を厳密に指定していない場合はリレーションとすばやく連携したりすることができます。
リレーションのタイプは、リレーション定義のカーディナリティ、および必要とされるリレーション側のロールによって異なります。
リレーションの取得
リレーションの取得
リレーションはエンティティから取得できます。
プロパティ名の大文字と小文字は区別されません。
非汎用
タイプを指定せずにリレーションを取得するには、次のようにします。
汎用
型指定されたリレーションを取得するには、次のようにします (推奨されるアプローチ)。
リレーションが見つからないか場合や読み込まれていない場合は、null が返されます。ただし、リレーションは遅延読み込みされることがあります。詳細については、遅延読み込みを参照してください。
読み込まれたすべてのリレーションは、IEntity.Relations プロパティを使用してアクセスすることができます。これは、たとえば、LINQ を使用してリレーションをフィルタリングする場合に役立ちます。
リレーション値
リレーション値
使用されているリレーション インターフェイスによって、値の取得と設定にはさまざまな方法があります。全般的な概要については、API docs を参照してください。
非汎用
IRelation は、値に対する複数の操作をサポートします。これが最も簡単にリレーションを操作する方法かもしれませんが、エラーは発生しやすくなります。4 つの主なリレーション インターフェイスを使用し、それらのプロパティを使用することをお勧めします。
値を取得すると、常に ID のリストが返されます。リレーションが IToManyRelation である場合は、リストには 0 個以上の値を含めることができます。リレーションが IToOneRelation の場合は、空のリストまたは 1 つの値だけを返します。
値の設定は、ID のコレクションを渡すことによって行われます。リレーションが IToManyRelation である場合は、リストには 0 個以上の値を含めることができます。リレーションが IToOneRelation である場合は、リストには 0 個または 1 個の値を含めることができます。
リレーションの値をクリアするには、次の手順に従います。
汎用
厳密に型指定されたリレーションは、値をより適切にサポートします。たとえば、IParentToManyChildrenRelation を取得します。
その子を取得するには、次のようにします。
子を追加するには、次のようにします。
別の便利な例としては、IToManyRelation があります。.NET IList では一度に複数のアイテムの追加がサポートされていないので、IToManyRelation にこの機能が追加されています。
自己参照リレーションの処理
自己参照リレーションの処理
自己参照リレーションは、リレーションの両側で同じエンティティ定義を参照するリレーションです。これにより、エンティティ上で同じ名前の 2 つのリレーション オブジェクトが作成されます。
非汎用的な方法でリレーションを取得する場合は、必要なロールを指定する必要があります。そうでない場合は、InvalidOperationException がスローされます。一致するリレーションが 2 つあるからです。
汎用的な方法でリレーションを取得する場合は、SDK がインターフェイスからロールを抽出します。したがって、次の例は、通常の自己参照リレーションで機能します。
これにより、内部でロール Child が抽出されます。
IRelation に汎用 GetRelation を渡さないでください。渡すと、SDK がロールを抽出できません。