在DotNetNuke3.0中,如果我们用英文版安装的时候,在数据库中我们可以看到大部分表都有一个前缀“_DNN”。为什么要设置这个前缀呢,是因为利用objectqualifier(表现为前缀),可以允许在同一个数据库中建立多个主机。在每个存储过程和表中都指定了objectqualifier。例如,你可以设置一个主机利用 'DNN1'作为前缀,同时设置另一个主机的前缀为'DNN2'。通过这种方式,可以在同一个数据库中生成两个用户表,其结构一致,功能一致,但是一个表名为“DNN1_Portals”,另一个表名为“DNN2_Portals”。这两个表且能够在同一个数据库并行运行,而不相互影响。
在什么地方设置表安装时候的前缀呢?在DNN3.0 web.config(第273行)中,我们可以看看
<data defaultProvider="SqlDataProvider">
<providers>
<clear />
<add name="SqlDataProvider"
type="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"
connectionStringName="SiteSqlServer"
upgradeConnectionString=""
providerPath="~\Providers\DataProviders\SqlDataProvider\"
objectQualifier="DNN"
databaseOwner="dbo" />
</providers>
</data>
在这个xml节中,objectQualifier="DNN"设置了前缀,所有的表和存储过程,就加上了这个相应地前缀。上边的实例中,只不过在这里设置了两个不同的前缀而已,一个为"DNN1",一个为"DNN2"罢了。
接下来,我们先看看在创建表和存储过程的SQL脚本中,其具体实现。
CREATE TABLE {databaseOwner}{objectQualifier}PortalAlias (
[PortalAliasID] [int] IDENTITY (1, 1) NOT NULL ,
[PortalID] [int] NOT NULL ,
[HTTPAlias] [varchar] (200)
) ON [PRIMARY]
GO
CREATE procedure {databaseOwner}{objectQualifier}GetPortalByAlias
@HTTPAlias nvarchar(200)