Namespaces (Entity SQL)

Entity SQL vermeidet Namenskonflikte bei globalen Bezeichnern wie Typnamen, Entitätenmengen, Funktionen usw. mithilfe von Namespaces. Die Namespaceunterstützung in Entity SQL ähnelt der Namespaceunterstützung in .NET Framework.

Entity SQL stellt, wie in folgendem Beispiel veranschaulicht, zwei Arten der USING-Klausel zur Verfügung: qualifizierte Namespaces (wobei ein kürzerer Alias für den Namespace bereitgestellt wird) und unqualifizierte Namespaces:

USING System.Data;

USING tsql = System.Data;

Regeln zur Namensauflösung

Wenn ein Bezeichner nicht in den lokalen Bereichen aufgelöst werden kann, sucht Entity SQL den Namen in den globalen Bereichen (den Namespaces). Entity SQL vergleicht zunächst den Bezeichner (Präfix) mit einem der qualifizierten Namespaces. Wenn eine Übereinstimmung festgestellt wird, versucht Entity SQL, den Rest des Bezeichners im angegebenen Namespace aufzulösen. Wenn keine Übereinstimmung festgestellt werden kann, wird eine Ausnahme ausgelöst.

Anschließend sucht Entity SQL nach allen unqualifizierten Namespaces (die im Prolog angegeben sind) für den Bezeichner. Wird der Bezeichner in genau einem Namespace gefunden, wird dieser Bereich zurückgegeben. Wenn dem Bezeichner mehrere Namespaces entsprechen, wird eine Ausnahme ausgelöst. Wenn für den Bezeichner kein Namespace gefunden werden kann, übergibt Entity SQL den Namen an den nächsten äußeren Bereich (das DbCommand- oder DbConnection-Objekt), wie in folgendem Beispiel dargestellt:

SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)

Unterschiede zum .NET Framework

In .NET Framework können teilweise qualifizierte Namespaces verwendet werden. Entity SQL lässt dies nicht zu.

Verwendung von ADO.NET

Abfragen werden mit ADO.NET-DbCommand-Objekten ausgedrückt. DbCommand-Objekte werden über DbConnection-Objekte erstellt. Namespaces können außerdem als Teil der DbCommand- und DbConnection-Objekte spezifiziert werden. Wenn Entity SQL einen Bezeichner nicht in der Abfrage selbst auflösen kann, werden die externen Namespaces (nach ähnlichen Regeln) untersucht.

Siehe auch