在 DotNetNuke 3.0 版本中,若使用英文版安裝,資料庫中的大多數資料表名稱都會帶有「_DNN」前綴。這個前綴並非隨意加入,而是透過 objectQualifier 參數實現,其核心目的是允許在單一資料庫中部署多個獨立的 DNN 主機實例。透過為每個主機指定不同的前綴(如 DNN1、DNN2),即可在同一資料庫中建立結構相同、功能獨立的資料表(例如 DNN1_Portals 與 DNN2_Portals),兩者並行運作互不干擾,極大提升了資源利用率與部署彈性。
在 DNN 3.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>
此處的 objectQualifier="DNN" 即定義了所有資料表與預存程序的前綴。若需部署多主機,只需在各自的 web.config 中分別設定 DNN1、DNN2 等不同值即可。
在建立資料表與預存程序的 SQL 腳本中,會使用 {databaseOwner} 與 {objectQualifier} 兩個標記作為佔位符,執行安裝時由系統自動替換為實際值:
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)
這種設計讓 DNN 能夠靈活適應多租戶、多站點的部署需求,是其架構靈活性的重要體現。