DataRelation 物件簡介
包含相關資料表的資料集會使用 DataRelation 物件,以便表示資料表之間的父/子關聯性,以及互相傳回關聯的資料錄。 使用 [資料來源組態精靈] 或 [DataSet 設計工具],將相關資料表加入至資料集時,便會為您建立和設定 DataRelation 物件。 如需傳回相關資料錄的詳細資訊,請參閱 HOW TO:存取關聯 DataTable 中的資料錄。 如需建立資料關聯的詳細資訊,請參閱 HOW TO:以 DataSet 設計工具建立 DataRelation。
DataRelation 物件會執行兩項功能:
可讓您取得與正在使用的資料錄關聯的資料錄。 如果您正在父資料錄 (GetChildRows) 中,會提供子資料錄,而如果正在使用子資料錄 (GetParentRow),則會提供父資料錄。
可強制執行條件約束以維護參考完整性 (Referential Integrity),例如當您刪除父資料錄時,也會刪除關聯子資料錄。
您必須瞭解,真正的聯結 (Join) 和 DataRelation 物件的功能是不同的。 在真正的聯結中,資料錄是從父和子資料表取得,然後放入單一的一般資料錄集。 當您使用 DataRelation 物件時,並不會建立新的資料錄集。 然而,關聯會追蹤資料表之間的關聯性,並且使父和子資料錄保持同步。
DataRelation 物件和條件約束
DataRelation 物件也可用來建立和強制執行下列條件約束:
唯一的條件約束,保證資料表中的資料行不會重複。
外部索引鍵條件約束,可用來維護資料集內父和子資料表之間的參考完整性。
您在 DataRelation 物件中指定的條件約束,是透過自動建立適當物件或設定屬性的方式來實作。 如果您使用 DataRelation 物件建立外部索引鍵條件約束,則 ForeignKeyConstraint 類別的執行個體會加入至 DataRelation 的 ChildKeyConstraint 屬性中。
唯一條件約束的實作方式,則只需將資料行的 Unique 屬性設為 true,或將 UniqueConstraint 類別的執行個體加入 DataRelation 物件的 ParentKeyConstraint 即可。 如需暫止資料集中條件約束的詳細資訊,請參閱 HOW TO:填入 DataSet 時關閉條件約束。
參考完整性規則
由於是外部索引鍵的一部分,您可指定在下列三個時間點所套用的參考完整性規則:
於更新父資料錄時
於刪除父資料錄時
於接受或拒絕變更時
您可建立的規則是在 Rule 列舉型別中指定,如下表所示。
外部索引鍵條件約束規則 |
動作 |
---|---|
在父資料錄所進行的變更 (更新或刪除) 也會在子資料表中的關聯資料錄進行。 |
|
不刪除子資料錄,但子資料錄中的外部索引鍵會設定為 DBNull。 這個設定會讓子資料錄像是被遺棄的「孤兒」一般,也就是說,它們與父資料錄並沒有關聯性。
注意事項
使用這個規則可能會導致子資料表出現無效資料。
|
|
相關子資料錄中的外部索引鍵會設定為預設值 (就如同資料行的 DefaultValue 屬性所建立的一樣)。 |
|
關聯子資料錄不會進行變更。 這個設定會讓子資料錄最後包含無效父資料錄的參考。 |
如需資料集資料表更新的詳細資訊,請參閱儲存資料集中的資料。
僅條件約束的關聯
建立 DataRelation 物件時,您可以選擇是否要將關聯指定為僅用來強制執行條件約束,也就是說,不會使用它來存取關聯資料錄。 這個選項可以讓您產生稍微更有效率的資料集,而且其中包含的方法比具有關聯資料錄功能的資料集來得少。 不過,您將無法存取關聯資料錄。 例如,僅條件約束的關聯會阻止您刪除仍有子系的父資料錄,而且不可以透過父代存取子資料錄。