在 .NET Framework 應用程式中建立資料集之間的關聯性
注意
資料集和相關類別是 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 中的資料設計工具建立資料表時,如果可以從資料來源收集資訊,則會自動建立關聯性。 如果從工具箱的 [DataSet] 索引標籤手動新增資料表,則可能需要手動建立關聯性。 如需以程式設計方式建立 DataRelation 物件的資訊,請參閱新增 DataRelations。
資料表之間的關聯性在 資料集設計工具中顯示為行,其中索引碼和無窮大字符描述了關聯性的一對多方面。 根據預設,關聯性的名稱不會顯示在設計介面上。
注意
在本文的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置。 您使用的可能是不同版本的 Visual Studio 或不同的環境設定。 如需詳細資訊,請參閱將 IDE 個人化。
若要建立兩個資料表之間的關聯性
在 [資料集設計工具] 中開啟資料集。 如需詳細資訊,請參閱逐步解說:在 資料集設計工具中建立資料集。
將 [DataSet] 工具箱中的 [關聯性] 物件拖曳至關聯性中的子資料表上。
此時將開啟 [關聯] 對話方塊,用拖動 [關聯] 物件的資料表填入 [子資料表] 對話方塊。
從 [父資料表] 方塊中選取父資料表。 父資料表包含一對多關聯性「一」側的記錄。
驗證 [子資料表] 方塊中是否顯示了正確的子資料表。 子資料表包含一對多關聯性「多」側的記錄。
在 [名稱] 方塊中鍵入關聯性的名稱,或保留基於已選取資料表的預設名稱。 這是程式碼中實際 DataRelation 物件的名稱。
在 [索引鍵資料行] 和 [外部索引鍵資料行] 清單中選取聯結資料表的資料行。
選取是建立關聯、限制式,還是建立兩者。
選取或清除 [巢狀關聯] 方塊。 選取此選項會將 Nested 屬性設定為
true
,並且當這些行被寫入 XML 資料或與 XmlDataDocument 同步時,會導致關聯的子資料列巢狀於父資料行中。 如需詳細資訊,請參閱巢狀 DataRelations。設定在變更這些資料表中的記錄時要強制執行的規則。 如需詳細資訊,請參閱Rule。
按一下 [確定] 以建立關聯性。 設計工具上會顯示兩個資料表之間的關聯行。
在 資料集設計工具中顯示關聯名稱
在 [資料集設計工具] 中開啟資料集。 如需詳細資訊,請參閱逐步解說:在 資料集設計工具中建立資料集。
從 [資料] 功能表中,選取 [顯示關聯標籤] 命令以顯示關聯名稱。 清除該命令可以隱藏關聯名稱。