命名空间 (Entity SQL)
Entity SQL 引入命名空间以避免全局标识符(如类型名称、实体集、函数等)出现名称冲突。Entity SQL 中的命名空间支持与 .NET Framework 中的命名空间支持类似。
Entity SQL 提供两种形式的 USING 子句:限定命名空间(其中,提供较短的别名以表示命名空间)和非限定命名空间,如下例所示:
USING System.Data;
USING tsql = System.Data;
名称解析规则
如果在局部作用域内无法解析标识符,则 Entity SQL 尝试在全局作用域(命名空间)内查找该名称。Entity SQL 首先尝试将此标识符(前缀)与其中一个限定命名空间匹配。如果匹配,则 Entity SQL 尝试在指定的命名空间中解析标识符的其余部分。如果未找到匹配项,则将引发异常。
接下来,Entity SQL 尝试搜索所有非限定命名空间(在序言中指定)以查找该标识符。如果只能在一个命名空间中找到此标识符,则返回该位置。如果多个命名空间对于该标识符具有匹配项,则引发异常。如果对于此标识符无法确定任何命名空间,则 Entity SQL 将名称传递到下一个外部范围(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 无法在查询自身中解析标识符,则将探测外部命名空间(基于类似规则)。