為資料庫專案建立自訂功能
您可以藉由加入自己的功能來擴充現有的資料庫專案類型。 例如,您可以建立會在每次載入或儲存資料庫專案時都執行某個動作的功能。 您也可以建立自訂的資料庫結構描述提供者和支援的專案系統。 不過,本內容的討論範圍並不涵蓋該類擴充性。
一般工作
一般工作 |
支援內容 |
---|---|
了解擴充點的詳細資訊:您可以閱讀有關資料庫專案擴充性設計的詳細資訊。 |
|
建立範例專案功能:了解若要建立自訂專案功能以在載入資料庫專案時顯示對話方塊,必須執行的步驟。 如果您遵循此逐步解說,則可以:
|
|
安裝自訂專案功能:建立並建置專案功能之後,您必須安裝該功能,這樣 Visual Studio 才能認得它。 |
專案擴充性的目標
Visual Studio 2010 中資料庫專案擴充性功能的主要目標如下:
透過介面公開主要元件
這個方法會透過介面而非抽象類別,讓專案系統與結構描述模型保持一致。 這需要使用單一具象類別來實作許多介面。由擴充性管理員建立功能
功能負責系統的主要部分,包括方案總管、結構描述檢視、專案升級和專案屬性。可以擴充的功能
功能可以透過擴充性管理員、XML 檔案、登錄或其他方法來提供這類擴充性。服務會以專屬的介面來公開
DataPackage 會實作 IServiceProvider。 功能之間的任何交叉通訊都應該透過這些層級的服務來處理。 您不應該以服務的形式公開您的功能。 您應該先建立新的介面、包裝函式類別,然後再以服務的形式將包裝函式公開。由事件引導專案系統
DataPackage 和 ProjectNode() 提供讓功能引導專案系統的事件。 此外,功能可以透過自己專屬的服務介面來提供事件。 在某些情況下,您可能會決定使用委派。 若要決定由哪個功能處理動作,請考慮使用事件法,這種方式可讓功能根據優先順序彼此互動。不依賴接聽程式的順序
如果事件接聽程式的順序很重要,請考慮建立 Pre 或 Post 事件,或是考慮將優先順序屬性加入至衍生自 EventArg 的類別。
元件模型組件
下列組件提供 Visual Studio 中的資料庫專案系統。
Microsoft.VisualStudio.Data.Schema.Package.dll
基底專案系統提供了功能的啟動載入和事件機制。 這包括資料庫診斷功能,例如指令碼。Microsoft.VisualStudio.Data.Schema.PackageUI.dll
資料庫診斷套件的附屬組件。Microsoft.VisualStudio.Data.Schema.Package.Sql.dll
Visual Studio 適用的 SQL Server 特有功能、編輯器和工具視窗。Microsoft.VisualStudio.Data.Schema.Package.SqlUI.dll
SQL Server 特有功能、編輯器和工具視窗的附屬組件。
擴充點
您可以擴充資料庫專案系統的下列點:
IDatabaseProjectFeature (AllowMultipleExtensions =true)
這是專案系統的主要擴充點。 功能是專為控制專案和貢獻而設計。 功能可以選擇性實作的介面有幾個:IOleCommandTarget、IDatabaseProjectPriorityCommandTarget, IDatabaseProjectPropertyPageContributor、IDatabaseProjectExtenderContributor<TExtendee>, IDatabaseProjectAddNewItemParticipant、IDatabaseProjectIdleProcessor 和 IDatabaseProjectPartialProjectParticipant。IDatabaseProjectBuildActionContributor (AllowMultipleExtensions =false)
將 BuildAction 字串貢獻給專案系統中的可能建置動作清單。例如,SQL Server 專案系統會貢獻 Predeploy 和 Postdeploy。IDatabaseProjectUserFileContributor (AllowMultipleExtensions =false)
指定應將哪些屬性路由至 .user 檔案。IDatabaseSchemaViewController (AllowMultipleExtensions =false)
填入結構描述檢視,並回應來自該檢視的事件。IDatabaseProjectFileUpgradeController (AllowMultipleExtensions =false)
以 XML 文件的形式升級專案檔。 這個程序會發生在 Visual Studio 專案系統嘗試透過專案 Factory 載入專案執行個體之前。IDatabaseProjectReferenceController (AllowMultipleExtensions = false)
控制專案參考。IDatabaseProjectPartialProjectParticipant (AllowMultipleExtensions = true)
讓功能得以篩選出不應做為部分專案匯出的檔案。IDatabaseProjectHelpKeywordProvider
提供當客戶按下 F1 時使用的專案系統 Help 關鍵字。
資料庫專案存留期
每個資料庫專案檔 (.dbproj) 都包含名為 "DSP" 的屬性,這個屬性表示在 Visual Studio 中開啟這個專案時,負責處理這個專案的特定 DatabaseSchemaProvider。 專案系統會使用這個 DSP 建立擴充管理員,然後從該擴充管理員建構所有的專案系統參與者和專案功能。 每個功能都會收到 Initialize 事件,以便藉由接聽事件將自己初始化並根植在專案系統中。
在專案開啟/關閉和儲存期間,會引發下列事件:
NewProjectCreated
這個事件發生於專案第一次建立時。 您可以將這個事件處理成顯示精靈或安裝對話方塊。ProjectOpening
專案正在開啟。 您可以將這個事件處理成將任何服務加入至 IDatabaseProjectNode。ProjectOpened
這個事件發生於已加入所有服務,且專案已完成開啟時。 不過,專案尚未完成還原序列化其之前的狀態。 在送出 ProjectLoaded 事件之前,TaskHost 和 DataSchemaModel 會一直是 NULL。ProjectLoaded
專案已完全載入。 TaskHost 和 DataSchemaModel 已準備好可供使用。ProjectClosing
專案正在關閉。 這是保存任何在專案檔外的狀態資訊的好機會。ProjectClosed
專案已關閉。ProjectSaving
專案正在執行儲存作業。 您可以利用這個機會,確定您的功能處於可儲存其永續性的狀態。ProjectSaved
專案已儲存。
錯誤管理
每個專案都有一個 ErrorManager。 有些錯誤會保存至 .dbmdl 檔案,有些則不會。 這是透過 AddPersistedCategory 類別來控制。 預設會保存的分類有:ModelCategory、ValidationAtBuildCategory 和 ValidationOnIdleCategory。 如果您加入另一個保存的分類,則您必須處理專案重新載入,並且確認和管理您的錯誤。 請記住,雖然專案已關閉,但是使用者仍可能已編輯 .dbproj 檔案而移除您要報告錯誤的檔案。 在沒有這類檔案時在專案中報告錯誤,會讓使用者感到很疑惑。
資料庫錯誤物件會加入至 ErrorManager 內的特定分類中。 這樣做的概念是,專案功能可以透過其分類的存留期來管理其錯誤的存留期。 如果您擔心分類名稱會與其他功能衝突,請使用 GUID 做為名稱。 ErrorManager 定義多個內建分類,包括:
DefaultCategory
這個分類是專為讓您用於與專案有相同存留期的錯誤而設計。 因此,像在專案載入期間發生的錯誤就會加入至這個分類中。ModelCategory
結構描述管理員在遇到像分析器錯誤這類錯誤時,應該使用這個類別。