名前空間 (Entity SQL)
型名、エンティティ セット、関数など、グローバル識別子の名前の競合を防ぐために、Entity SQL には名前空間が採用されています。 Entity SQL での名前空間のサポートは、.NET Framework での名前空間のサポートと似ています。
次の例のように、Entity SQL では、2 とおりの形式で USING 句を指定できます。1 つは略称的な別名を指定する修飾名前空間、もう 1 つは別名を指定しない非修飾名前空間です。
USING System.Data;
USING tsql = System.Data;
名前解決ルール
識別子がローカル スコープ内で解決できない場合、Entity SQL ではグローバル スコープ (名前空間) で名前が探索されます。 Entity SQL は、まず識別子 (プレフィックス) と修飾名前空間の 1 つを照合します。 一致が見つかった場合は、Entity SQL により、指定された名前空間で、その識別子の残りの部分の解決が試みられます。 一致が見つからなかった場合は、例外がスローされます。
次に、Entity SQL により、すべての (プロローグで指定された) 非修飾名前空間で識別子の検索が試みられます。 その識別子が属している名前空間を一意に特定できた場合は、その場所が返されます。 同じ識別子に対して複数の名前空間が見つかった場合は、例外がスローされます。 識別子に対応する名前空間を特定できなかった場合、Entity SQL では、次の例のように、名前が 1 つ外側のスコープ (DbCommand オブジェクトまたは DbConnection オブジェクト) に渡されます。
SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)
.NET Framework との違い
.NET Framework では、部分修飾名前空間を使用できます。 Entity SQL では使用できません。
ADO.NET の使用法
クエリは、ADO.NET の DbCommand オブジェクトを使用して表されます。 DbCommand オブジェクトは、DbConnection オブジェクトに対して構築できます。 名前空間を DbCommand オブジェクトや DbConnection オブジェクトの一部として指定することもできます。 Entity SQL によってクエリ自体の内部で識別子を解決できなかった場合は、同様のルールに従って、外側の名前空間が調査されます。