Sdílet prostřednictvím


Hierarchická aktualizace

 

Publikováno: duben 2016

Hierarchické aktualizace odkazuje na proces uložení aktualizovaných dat (z datové sady pomocí dvou nebo více souvisejících tabulek) zpět do databáze při zachování pravidel referenční integrity.Referenční integrity odkazuje na pravidla konzistence poskytované omezení v databázi, která určují chování vložení, aktualizace a odstranění souvisejících záznamů. Je například referenční integrity, který vynutí vytvoření záznamu zákazníka před povolením příkazy, které mají být vytvořeny pro tohoto zákazníka. Další informace o vztahy v datových sadách naleznete v tématu Vztahy v datových sadách

Hierarchická aktualizace funkce používá TableAdapterManager ke správě TableAdapters v typové datové sady.TableAdapterManager Komponenta je Visual Studio– generované třídy, takže není součástí .NET Framework. Při přetažení tabulky z okna zdroje dat do formuláře Windows nebo WPF stránce Visual Studio přidá proměnnou typu TableAdapterManager třídy formuláře nebo stránky a zobrazení v Návrháři v panelu komponent. Podrobné informace o TableAdapterManager třídy, naleznete v části odkaz TableAdapterManager TableAdapterManager – přehled.

Ve výchozím nastavení, datové sady zpracovává související tabulky jako "pouze vztahy" což znamená, že není vynutit omezení cizího klíče. Toto nastavení v době návrhu lze upravit pomocí návrháře dataset. Klikněte na řádek vztah mezi dvěma tabulkami se zprovoznit dialogové okno vztah. Zde provedené změny se určí TableAdapterManager chování při odešlete změny v souvisejících tabulek zpět do databáze.

Povolení hierarchické aktualizace v datové sadě

Hierarchická aktualizace je ve výchozím nastavení povoleno pro všechny nové datové sady, které jsou přidány nebo vytvořeny v projektu. Hierarchická aktualizace zapnout nebo vypnout nastavením hierarchické aktualizace vlastnost typové datové sady v Vytváření a úpravy typovaných datových sad k True nebo False:

Hierarchical update setting

Vytvořit nový vztah mezi tabulkami

Chcete-li vytvořit nový vztah mezi dvěma tabulkami v Návrháři Dataset vyberte záhlaví každá tabulka pak klikněte pravým tlačítkem myši a zvolte Přidat vztah.

Hierarchical update add relation menu

Omezení cizího klíče a kaskádové aktualizace a odstranění

Je důležité porozumět omezení jak cizího klíče a kaskádovou chování v databázi jsou vytvořeny v kódu generované datová sada.

Ve výchozím nastavení, jsou generovány tabulek dat v datové sadě s vztahy (DataRelation) odpovídající vztahy v databázi. Relace v datové sadě však není generována jako omezení cizího klíče.DataRelation Je nakonfigurován jako vztahu pouze bez UpdateRule nebo DeleteRule v platnosti.

Ve výchozím nastavení kaskádové aktualizace a kaskádě jsou vypnuty i v případě, že relace databáze se nastavuje pomocí kaskádové aktualizace nebo odstranění v kaskádě zapnuta. Například vytvoření nového zákazníka a nové objednávky a pak pokusu o uložení dat může způsobit konflikt s omezení cizího klíče definované v databázi. Další informace naleznete v tématu Postupy: Konfigurace omezení cizího klíče v datové sadě.

Nastavení pořadí provádění aktualizací

Nastavení pořadí provádět aktualizace sad pořadí jednotlivých vloží, aktualizace a odstraní potřebný pro uložení upravených dat ve všech tabulkách datové sady. Pokud je povoleno hierarchické aktualizace, vloží jsou prováděny první, pak aktualizací a poté odstraní.TableAdapterManager Poskytuje UpdateOrder vlastnost, která může být nastaven na aktualizace provést jako první, pak vložení a odstranění.

Poznámka

Je důležité si uvědomit, že pořadí aktualizace je všechny (včetně). To znamená když jsou provedeny aktualizace, vloží jsou prováděny pro všechny tabulky v datové sadě, pak jsou provedeny aktualizace pro všechny tabulky v datové sadě a pak odstraní jsou provedena pro všechny tabulky v datové sadě.

Chcete-li nastavit UpdateOrder vlastnost Po přetažení položek z Okno zdroje dat do formuláře, klikněte na tlačítko TableAdapterManager v komponent a sada UpdateOrder vlastnost v Vlastnosti okna. Další informace naleznete v tématu Postupy: Nastavení pořadí při provádění hierarchické aktualizace.

Vytvoření záložní kopie sady dat před provedením hierarchické aktualizace

Při ukládání dat (voláním TableAdapterManager.UpdateAll() Metoda), TableAdapterManager pokusí aktualizovat data pro každou tabulku v rámci jedné transakce. Pokud se nezdaří žádnou část aktualizace pro všechny tabulky, celá transakce vrácena zpět. Ve většině situací vrácení transakce zpět vrátí aplikace do původního stavu. Však někdy můžete chtít obnovit datovou sadu ze záložní kopie. Jedním z příkladů je při použití hodnoty automatickým krokem. Pokud k uložení například operace se nezdaří, automatické zvýšení hodnoty nejsou nastaveny v datové sadě a datová sada bude nadále vytvořit automatické zvyšování hodnoty, ponechejte mezera v číslování, který nemusí být přijatelné ve vaší aplikaci. V situacích, kde jedná se o problém TableAdapterManager poskytuje BackupDataSetBeforeUpdate vlastnost, která nahradí existující datovou sadu s záložní kopie, pokud se transakce nezdaří.

Poznámka

Záložní kopie je pouze v paměti během provádění TableAdapterManager.UpdateAll Metoda. Proto neexistuje žádný programový přístup k této datové sady zálohování vzhledem k tomu, že ji nahradí původní dataset nebo dostane mimo rozsah co nejdříve TableAdapterManager.UpdateAll dokončení metody.

Úprava generované uložit kód k provádění hierarchické aktualizace

Uložte změny do databáze voláním z tabulek souvisejících dat v datové sadě TableAdapterManager.UpdateAll Metoda a předávání název datové sady, který obsahuje související tabulky. Například spustit TableAdapterManager.UpdateAll(NorthwindDataset) Metoda odesílat aktualizace ze všech tabulek v NorthwindDataset databáze back-end.

Po přetažení položky z zdroje dat okna, kód je automaticky přidán do Form_Load událostí k naplnění každá tabulka ( TableAdapter.Fill metody). Kód je přidáno také do Uložit události kliknutí na tlačítko BindingNavigator Uložit data z datové sady zpět do databáze ( TableAdapterManager.UpdateAll Metoda).

Generované uložit kód také obsahuje řádek kódu, který volá CustomersBindingSource.EndEdit Metoda. Přesněji řečeno, volá EndEdit Metoda první BindingSource přidán do formuláře. Jinými slovy, tento kód se vygeneruje pouze pro první přetáhli z tabulky zdroje dat okna do formuláře.EndEdit Volání potvrzení změny, které jsou v procesu v všechny ovládací prvky vázané na data, které jsou nyní upravován. Proto pokud ovládací prvek vázaný na data má stále fokus a klikněte na tlačítko Uložit tlačítko všechny čekající změny v tom smyslu, že jsou před skutečné uložit potvrzené ovládací prvek ( TableAdapterManager.UpdateAll Metoda).

Poznámka

Návrhář přidá pouze BindingSource.EndEdit vynechán kód pro první tabulky do formuláře. Proto je nutné přidat řádek kódu pro volání BindingSource.EndEdit Metoda pro všechny související tabulky na formuláři. V tomto návodu, to znamená, je nutné přidat volání OrdersBindingSource.EndEdit Metoda.

Aktualizovat kód potvrzení tabulky v relaci před uložením změn

  1. Dvakrát klikněte Uložit na tlačítko BindingNavigator Otevřete Form1 v editoru kódu.

  2. Přidat řádek kódu pro volání OrdersBindingSource.EndEdit po řádku, který volá metodu CustomersBindingSource.EndEdit Metoda. Kód v Uložit klepnutím na tlačítko události by měl vypadat takto:

                this.Validate();
                this.customersBindingSource.EndEdit();
                this.ordersBindingSource.EndEdit();
                this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    
            Me.Validate()
            Me.CustomersBindingSource.EndEdit()
            Me.OrdersBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet)
    

Kromě potvrzení změn v související podřízené tabulce před uložením dat do databáze, možná budete také muset potvrzení nově vytvořeného nadřazené záznamy před přidáním nové podřízené záznamy do datové sady. Jinými slovy může být musíte přidat nové nadřazený záznam (zákazníka) do datové sady než omezení cizího klíče povolit nové podřízené záznamy (objednávky), který se má přidat do datové sady. K tomu, můžete použít podřízené BindingSource.AddingNew událostí.

Poznámka

Může nebo nemusí mít potvrzení nové nadřazené záznamy; To závisí na typu ovládacího prvku, který se používá k připojení ke zdroji dat. V tomto návodu použijete jednotlivých ovládacích prvků pro připojení k nadřazené tabulce. To vyžaduje další kód k potvrzení nového nadřazeného záznamu. Je-li nadřazené záznamy byly zobrazeny v ovládacím prvku komplexní vazby jako DataGridView, tomto dodatečná EndEdit volání pro nadřazený záznam by být nezbytné. Je to proto, že základní funkce datové vazby ovládacího prvku zpracovává potvrzení nové záznamy.

Chcete-li přidat kód pro potvrzení nadřazené záznamy v datové sadě před přidáním nové podřízené záznamy

  1. Vytvořit obslužnou rutinu události pro OrdersBindingSource.AddingNew událostí.

    • Otevřete Form1 v návrhovém zobrazení, klikněte na tlačítko OrdersBindingSource v panelu komponent vyberte události v Vlastnosti okna a pak dvojitým kliknutím AddingNew událostí.
  2. Přidejte do obslužné rutiny události řádek kódu, který volá CustomersBindingSource.EndEdit Metoda. Kód v OrdersBindingSource_AddingNew obslužná rutina události by měl vypadat takto:

                this.customersBindingSource.EndEdit();
    
            Me.CustomersBindingSource.EndEdit()
    

TableAdapterManager odkaz

Ve výchozím nastavení TableAdapterManager Třída je generována, když vytvoříte datovou sadu, která obsahuje související tabulky. Chcete-li zabránit generovaná třída, změňte hodnotu Hierarchical Update Vlastnosti datové sady na hodnotu false. Při přetažení tabulku, která má vztah na návrhovou plochu formuláře systému Windows nebo WPF stránku sady Visual Studio deklaruje členské proměnné třídy. Pokud nepoužíváte datové vazby, budete muset ručně deklarovat proměnnou.

TableAdapterManager Třída není součástí .NET Framework. Proto vám ji nelze vyhledat v dokumentaci. Je vytvořen v době návrhu jako součást procesu vytváření datové sady.

Níže jsou často používané metody a vlastnosti TableAdapterManager třídy:

Člen Popis
UpdateAll Metoda Uloží všechna data ze všech tabulek, data.
BackUpDataSetBeforeUpdate Vlastnost Logická hodnota. Určuje, zda chcete vytvořit záložní kopii datovou sadu před spuštěním TableAdapterManager.UpdateAll Metoda.
název_tabulky TableAdapter vlastnost Představuje TableAdapter. Generované TableAdapterManager obsahuje vlastnost pro každý TableAdapter spravuje. Například datové sady pomocí tabulky Zákazníci a objednávky je vytvořen s TableAdapterManager který obsahuje CustomersTableAdapter a OrdersTableAdapter Vlastnosti.
UpdateOrder Vlastnost Ovládací prvky pořadí provádění jednotlivých příkazů Insert, Update a Delete. Tuto vlastnost nastavit na jednu z hodnot v TableAdapterManager.UpdateOrderOption výčtu.

Ve výchozím nastavení UpdateOrder je nastavena na InsertUpdateDelete. To znamená, které vstupy jsou prováděny pro všechny tabulky v datové sadě, pak jsou provedeny aktualizace pro všechny tabulky v datové sadě a poté odstraní jsou prováděny pro všechny tabulky v datové sadě. Další informace naleznete v tématu Postupy: Nastavení pořadí při provádění hierarchické aktualizace.

Viz také

Uložit data do databáze