命名空间 (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 将名称传递到下一个外部范围(DbCommandDbConnection 对象),如下例中所示:

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 对象表示的。 可以在 DbConnection 对象之上构建 DbCommand 对象。 也可以将命名空间指定为 DbCommandDbConnection 对象的一部分。 如果 Entity SQL 无法在查询自身中解析标识符,则将探测外部命名空间(基于类似规则)。

另请参见

概念

Entity SQL 参考
Entity SQL 概述