共用方式為


在 .NET Framework 應用程式中建立數據集之間的關聯性

備註

類別 DataSet 和相關類別是 2000 年代初的舊版 .NET Framework 技術,可讓應用程式在應用程式與資料庫中斷連線時使用記憶體中的數據。 這些技術特別適用於可讓使用者修改數據並將變更保存回資料庫的應用程式。 雖然數據集是經過證實的成功技術,但新 .NET 應用程式的建議方法是使用 Entity Framework Core。 Entity Framework 提供更自然的方式,以表格式數據作為物件模型使用,而且具有更簡單的程序設計介面。

包含相關數據表的數據集會使用 DataRelation 物件來代表數據表之間的父/子關聯性,以及從彼此傳回相關記錄。 使用 [數據源組態精靈] 或 [數據集設計工具] 將相關的數據表新增至數據集,會為您建立及設定 DataRelation 物件。

物件 DataRelation 會執行兩個函式:

  • 它可以提供與您正在使用之記錄相關的記錄。 如果您在父記錄(GetChildRows)中,則提供子記錄;而如果您在使用子記錄(GetParentRow),則提供父記錄。

  • 它可以強制執行引用完整性的約束條件,例如在刪除父記錄時同時刪除相關的子記錄。

請務必瞭解真正的聯結與 DataRelation 物件的功能之間的差異。 在實際的連接中,記錄會取自父資料表和子資料表,並放入單一的平面資料集。 當您使用 DataRelation 物件時,不會建立任何新的記錄集。 相反地,DataRelation 會追蹤數據表之間的關聯性,並讓父記錄和子記錄保持同步。

DataRelation 對象和條件約束

DataRelation物件也可用來建立並強制執行下列條件約束:

  • 資料表中欄位的唯一約束,可保證其中不重複。

  • 外鍵條件約束,可用來維護數據集中父數據表和子數據表之間的引用完整性。

您在物件中指定的 DataRelation 條件約束是藉由自動建立適當的物件或設定屬性來實作。 如果您使用 DataRelation 物件建立外鍵約束條件,ForeignKeyConstraint 類別的實例將會加入到 DataRelation 物件的 ChildKeyConstraint 屬性中。

實作唯一條件約束的方式是要麼是簡單地將數據行的Unique屬性設為true,要麼是將UniqueConstraint類別的實例添加到DataRelation對象的ParentKeyConstraint屬性。 如需暫停數據集中條件約束的資訊,請參閱 在填滿數據集時關閉條件約束

引用完整性規則

在外鍵約束中,您可以指定在三個時間點套用的引用完整性規則:

  • 更新父記錄時

  • 刪除父記錄時

  • 接受或拒絕變更時

您可以建立的規則會指定於Rule列舉中,並列於下表中。

外鍵條件約束規則 行動
Cascade 對父記錄所做的變更(更新或刪除)也會在子數據表的相關記錄中進行。
SetNull 子記錄不會刪除,但子記錄中的外鍵會設定為 DBNull。 使用此設定,子記錄可以保留為「孤兒」,也就是說,它們與父記錄沒有任何關聯性。 注意: 使用此規則可能會導致子數據表中的數據無效。
SetDefault 相關子記錄中的外鍵會設定為其預設值(由數據行的 DefaultValue 屬性所建立)。
None 不會對相關的子記錄進行變更。 使用此設定,子記錄可以包含對無效父記錄的引用。

如需數據集數據表中更新的詳細資訊,請參閱 將數據儲存回資料庫

僅有限制的關聯

當您建立 DataRelation 物件時,您可以選擇指定關聯只用來強制執行條件約束,也就是說,它也不會用來存取相關記錄。 您可以使用此選項來產生稍微更有效率的數據集,且包含的方法比具有相關記錄功能的方法少一個。 不過,您將無法存取相關的記錄。 例如,僅限條件約束的關聯可防止您刪除仍有子記錄的父記錄,而且您無法透過父系存取子記錄。

在數據集設計工具中手動建立數據關聯

當您使用 Visual Studio 中的數據設計工具建立資料表時,如果可以從數據源收集資訊,就會自動建立關聯性。 如果您從 [工具箱] 的 [數據集] 索引標籤手動新增數據表,您可能必須手動建立關聯性。 如需以程序設計方式建立 DataRelation 物件的資訊,請參閱 新增 DataRelations

數據表之間的關聯性會顯示為 資料集設計工具中的線條,其中主鍵和無限符號描述一對多的關係。 根據預設,關聯性的名稱不會出現在設計介面上。

備註

本文中的指示說明 Visual Studio 中可用的互動式開發體驗 (IDE) 最新版本。 您的電腦可能會顯示某些使用者介面元素的不同名稱或位置。 您可能使用不同的 Visual Studio 版本或不同的環境設定。 如需詳細資訊,請參閱 個人化 IDE

建立兩個數據表之間的關聯性

  1. 數據集設計工具中開啟您的數據集。 如需詳細資訊,請參閱 逐步解說:在數據集設計工具中建立數據集

  2. Relation 物件從 DataSet 工具箱拖曳至關聯性中的子數據表。

    [ 關聯] 對話框隨即開啟,在 [ 子數據表] 方塊中填入您拖曳 Relation 對象的數據表。

  3. 從 [父數據表] 方塊中選取 父數據表 。 父表包含一對多關係中「一」端的記錄。

  4. 確認在子資料表方塊中顯示的是正確的子資料表。 子表包含一對多關係中「多」端的記錄。

  5. 在 [ 名稱 ] 方塊中輸入關聯性的名稱,或根據選取的數據表保留預設名稱。 這是程式代碼中實際 DataRelation 物件的名稱。

  6. 選擇 鍵欄外鍵欄 列表中用於連接表格的欄位。

  7. 選取是否要建立關聯、條件約束或兩者。

  8. 選取或清除「巢狀關聯」方塊。 選取這個選項會將 Nested 屬性設定為 true,而且當這些數據列寫入為 XML 資料或與 XmlDataDocument同步處理時,會導致關聯子數據列在父數據行內。 如需詳細資訊,請參閱 巢狀資料關係

  9. 設定當您變更這些數據表中的記錄時,要強制執行的規則。 如需詳細資訊,請參閱Rule

  10. 按兩下 [確定 ] 以建立關聯性。 兩個數據表之間的設計工具上會出現關聯線。

在數據集設計工具中顯示關聯名稱

  1. 數據集設計工具中開啟您的數據集。 如需詳細資訊,請參閱 逐步解說:在數據集設計工具中建立數據集

  2. 從 [ 數據] 選單中,選取 [顯示關聯卷標 ] 命令以顯示關聯名稱。 清除該命令以隱藏關聯名稱。