共用方式為


DataRelation 物件簡介

包含相關資料表的資料集會使用 DataRelation 物件,以便表示資料表之間的父/子關聯性,以及互相傳回關聯的資料錄。 使用 [資料來源組態精靈] 或 [DataSet 設計工具],將相關資料表加入至資料集時,便會為您建立和設定 DataRelation 物件。 如需傳回相關資料錄的詳細資訊,請參閱 如何:存取關聯 DataTable 中的資料錄。 如需建立資料關聯的詳細資訊,請參閱 如何:以 DataSet 設計工具建立 DataRelation

DataRelation 物件會執行兩項功能:

  • 可讓您取得與正在使用的資料錄關聯的資料錄。 如果您正在父資料錄 (GetChildRows) 中,會提供子資料錄,而如果正在使用子資料錄 (GetParentRow),則會提供父資料錄。

  • 可強制執行條件約束以維護參考完整性 (Referential Integrity),例如當您刪除父資料錄時,也會刪除關聯子資料錄。

您必須瞭解,真正的聯結 (Join) 和 DataRelation 物件的功能是不同的。 在真正的聯結中,資料錄是從父和子資料表取得,然後放入單一的一般資料錄集。 當您使用 DataRelation 物件時,並不會建立新的資料錄集。 然而,關聯會追蹤資料表之間的關聯性,並且使父和子資料錄保持同步。

DataRelation 物件和條件約束

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

  • 唯一的條件約束,保證資料表中的資料行不會重複。

  • 外部索引鍵條件約束,可用來維護資料集內父和子資料表之間的參考完整性。

您在 DataRelation 物件中指定的條件約束,是透過自動建立適當物件或設定屬性的方式來實作。 如果您使用 DataRelation 物件建立外部索引鍵條件約束,則 ForeignKeyConstraint 類別的執行個體會加入至 DataRelationChildKeyConstraint 屬性中。

唯一條件約束的實作方式,則只需將資料行的 Unique 屬性設為 true,或將 UniqueConstraint 類別的執行個體加入 DataRelation 物件的 ParentKeyConstraint 即可。 如需暫止資料集中條件約束的詳細資訊,請參閱 如何:填入 DataSet 時關閉條件約束

0k21zcyx.collapse_all(zh-tw,VS.140).gif參考完整性規則

由於是外部索引鍵的一部分,您可指定在下列三個時間點所套用的參考完整性規則:

  • 於更新父資料錄時

  • 於刪除父資料錄時

  • 於接受或拒絕變更時

您可建立的規則是在 Rule 列舉型別中指定,如下表所示。

外部索引鍵條件約束規則

動作

Cascade

在父資料錄所進行的變更 (更新或刪除) 也會在子資料表中的關聯資料錄進行。

SetNull

不刪除子資料錄,但子資料錄中的外部索引鍵會設定為 DBNull。 這個設定會讓子資料錄像是被遺棄的「孤兒」一般,也就是說,它們與父資料錄並沒有關聯性。

注意事項注意事項
使用這個規則可能會導致子資料表出現無效資料。

SetDefault

相關子資料錄中的外部索引鍵會設定為預設值 (就如同資料行的 DefaultValue 屬性所建立的一樣)。

None

關聯子資料錄不會進行變更。 這個設定會讓子資料錄最後包含無效父資料錄的參考。

如需資料集資料表更新的詳細資訊,請參閱儲存資料集中的資料

0k21zcyx.collapse_all(zh-tw,VS.140).gif僅條件約束的關聯

建立 DataRelation 物件時,您可以選擇是否要將關聯指定為僅用來強制執行條件約束,也就是說,不會使用它來存取關聯資料錄。 這個選項可以讓您產生稍微更有效率的資料集,而且其中包含的方法比具有關聯資料錄功能的資料集來得少。 不過,您將無法存取關聯資料錄。 例如,僅條件約束的關聯會阻止您刪除仍有子系的父資料錄,而且不可以透過父代存取子資料錄。

請參閱

參考

DataRelation

GetChildRows

GetParentRows

資料來源組態精靈

概念

使用 Visual Studio 中的資料集

準備您的應用程式以接收資料

在您的應用程式中編輯資料

建立和編輯具類型資料集