資料產生器擴充性概觀
您可以使用 Visual Studio Premium 或 Visual Studio Ultimate,針對測試產生有意義的資料。 您可以透過使用內建的資料產生器,產生隨機資料、從現有的資料來源產生資料,並且控制資料產生的許多層面。 如果內建產生器的功能不夠,您可以建立自訂資料產生器。 若要建立自訂資料產生器,您可以使用 Microsoft.Data.Schema.Tools.DataGenerator 命名空間中的類別。
資料產生器擴充性 API
擴充性 API 會提供開發人員可以從中繼承的類別。 除了類別以外,此 API 也包含了一些可套用到衍生類別的屬性。 您可藉由套用這些屬性,減少一般情況下在自訂產生器中所需的程式碼數量。
您可以透過下列三個方式來使用擴充性 API,以建立自訂資料產生器:
擴充性 |
描述 |
難度 |
範例 |
---|---|---|---|
宣告式擴充性 |
|
容易 |
內建整數資料產生器 |
一般擴充性 |
|
中。 在大多數情況下建議使用這個方法。 |
|
基底擴充性 |
|
困難 |
無 |
基底擴充性
基底擴充性 API 是一項機制,資料產生引擎和資料產生計劃的設計工具會根據此 API 來互動。 這個 API 的用意是要達成以下目標:
強固性 – 同時在設計階段和執行階段引擎中提升一致且強固的實作方式。
彈性 – 支援複雜的產生器,如資料繫結產生器。
基底擴充性 API 中隱含一個設計方面的權衡考量,也就是它的複雜性更甚於高層的宣告式擴充性 API。
註冊自訂資料產生器
在您可以使用自訂資料產生器之前,必須先在電腦上註冊它。 如果您將自訂資料產生器提供給其他人使用,這些人必須在他們的電腦上註冊此產生器。
您可以使用以下方法來註冊自訂資料產生器:
方法 |
必要的使用權限 |
範例 |
---|---|---|
註冊 [擴充功能] 資料夾中的產生器。 |
進階使用者 (Power User) 或更高權限的使用者 |
|
建立部署專案來註冊產生器。 |
系統管理員 |
|
資料產生器、散發和設計工具
您可以建立自訂資料產生器,並為這些產生器建立自訂設計工具。 此外,您也可以為數值資料產生器建立自訂散發,並為這些散發建立自訂設計工具。
自訂資料產生器會依據您指定的規則集,產生隨機測試資料。 您可以使用預設設計工具搭配這些產生器,或者也可以藉由繼承 DefaultGeneratorDesigner 建立自訂設計工具。 例如,規則運算式資料產生器是使用內建資料產生器,但卻使用自訂的設計工具,所以可以在設計階段執行使用者輸入的自訂驗證。
藉由使用自訂產生器設計工具,您可以自訂擷取使用者輸入和輸出屬性的方式、設定預設值,以及指定驗證行為。
藉由使用自訂散發,您可以控制資料產生器所產生數值的散發。
自訂散發設計工具會控制自訂散發的設計階段行為。 這項行為包括取得散發的輸入屬性名稱、設定輸入屬性的預設值,以及驗證散發的輸入屬性值。
資料產生器與當地語系化
隨附在 Visual Studio Premium 和 Visual Studio Ultimate 中的資料產生器會經過當地語系化,因為 Visual Studio 會隨附多個語言版本。 您或許不必為您自訂的資料產生器當地語系化; 如果您必須建立一個將要當地語系化的資料產生器,您應該建立自訂設計工具。 您也可以覆寫 GetInputs 方法,為輸入屬性名稱當地語系化。
![]() |
---|
如果可以的話,您應該繼承自 DefaultGeneratorDesigner 類別,而不要實作 IDesigner 介面,以避免額外的工作。 |
資料產生器執行個體
自訂的資料產生器可以共用資料, 共用資料的範圍為產生器型別和資料庫資料表。 每一個產生器型別在每一個資料庫資料表中都會有唯一的執行個體字典。 例如,Customers 資料表的自訂資料產生器具有共用字典的存取權。 您可以將任何資訊放到此字典中,並分享該項資訊。 此字典一定會是每一個產生器型別和資料表的相同執行個體。 例如,您可以建立自訂的資料產生器,並從 GeneratorInit 要求字典。 然後,您可以驗證該字典是否包含共用資訊。 如果有的話,您可以使用這些資訊來產生資料; 您也可以建立共用資訊,以供產生器的其他執行個體使用。
![]() |
---|
產生器執行個體是一個進階的方法, 您可以使用產生器實例來建立自訂資料產生器,其可處理跨資料行的檢查條件約束,例如需要一個資料行大於另一個資料行的檢查條件約束。 |
資料產生程序
下列階段會發生資料產生:
判斷設計工具類型 |
設計階段 |
這個階段需要將資料產生器類型當做輸入。 然後,引擎可以查詢 GeneratorAttribute 來擷取設計工具類型。 在大多數情況下,GeneratorAttribute 繼承自基底類別,用於指定預設設計工具。 |
執行個體化及初始化設計工具 |
設計階段 |
此設計工具會執行個體化。 初始化設計工具的方式是藉由呼叫 Initialize 及傳遞產生器類型做為引數。 |
擷取輸入描述項 |
設計階段 |
從設計工具擷取 InputDescriptor。 預設設計工具會藉由擷取資料產生器的所有屬性 (標記為 InputAttribute) 來進行這項處理。 |
設定預設值 |
設計階段 |
設定預設值。 |
取得產生器輸出的描述 |
設計階段 |
從設計工具擷取 OutputDescriptor。 預設設計工具會使用標記為 OutputAttribute 的屬性建立描述,而描述會顯示在 [資料行詳細資料] 視窗的 [產生器輸出] 資料行中。 |
執行個體化產生器 |
執行階段 |
使用預設建構函式將資料產生器執行個體化。 |
設定產生器輸入 |
執行階段 |
會從設計工具擷取的輸入描述項於資料產生器中設定所有輸入值。 |
驗證產生器 |
執行階段 |
已呼叫 ValidateInputs 方法。 如果驗證失敗,產生器將會擲回 InputValidationException 例外狀況。 資料驗證例外狀況以外的任何例外狀況都會視為無法復原的錯誤。 |
初始化產生器 |
執行階段 |
已呼叫 Initialize 方法。 這個步驟會讓資料產生器在資料產生作業以前,執行任何必要的設定,例如,為目標資料庫指定連接字串或是為亂數產生器設定種子。 這個階段會在資料產生作業之前發生一次。 |
執行資料產生作業 |
執行階段 |
在這個階段中,會藉由呼叫 GenerateNextValues 方法來產生新的結果。 可以藉由使用 GetOutputValue 方法來擷取結果。 這個方法會從產生器擷取與輸出索引鍵相對應的純量值 (該索引鍵會以輸入的形式傳遞給產生器)。 這個階段會在產生您想要的所有結果之前,逐一查看結果。 |
清除 |
執行階段 |
在所有的資料產生作業完成後,會呼叫 Dispose 來清除產生器。 |
請參閱
工作
參考
Microsoft.Data.Schema.DataGenerator