Návod: Přizpůsobení chování tříd entit při vkládání, aktualizaci a odstraňování

Poznámka:

Datové sady a související třídy jsou staršími technologiemi rozhraní .NET Framework z počátku 2000, které aplikacím umožňují pracovat s daty v paměti, zatímco aplikace jsou odpojené od databáze. Jsou zvláště užitečné pro aplikace, které uživatelům umožňují upravovat data a uchovávat změny zpět do databáze. I když se datové sady ukázaly jako velmi úspěšná technologie, doporučujeme, aby nové aplikace .NET používaly Entity Framework Core. Entity Framework poskytuje přirozenější způsob práce s tabulkovými daty jako objektovými modely a má jednodušší programovací rozhraní.

Nástroje LINQ to SQL v sadě Visual Studio poskytují vizuální návrhovou plochu pro vytváření a úpravy tříd LINQ to SQL (tříd entit), které jsou založené na objektech v databázi. Pomocí TECHNOLOGIE LINQ to SQL můžete k přístupu k databázím SQL použít technologii LINQ. Další informace naleznete v tématu LINQ (Language Integrated Query).

Ve výchozím nastavení poskytuje logika pro provádění aktualizací modul runtime LINQ to SQL. Modul runtime vytvoří výchozí Insert, Updatea Delete příkazy založené na schématu tabulky (definice sloupců a informace o primárním klíči). Pokud nechcete používat výchozí chování, můžete nakonfigurovat chování aktualizace a určit konkrétní uložené procedury pro provádění potřebných vložení, aktualizací a odstranění potřebných pro práci s daty v databázi. Můžete to udělat také v případě, že se negeneruje výchozí chování, například když se třídy entit mapují na zobrazení. Kromě toho můžete přepsat výchozí chování aktualizace, když databáze vyžaduje přístup k tabulce prostřednictvím uložených procedur. Další informace naleznete v tématu Přizpůsobení operací pomocí uložených procedur.

Poznámka:

Tento návod vyžaduje dostupnost uložených procedur InsertCustomer, UpdateCustomer a DeleteCustomer pro databázi Northwind.

Tento názorný postup obsahuje kroky, které je třeba provést k přepsání výchozího chování LINQ to SQL runtime pro ukládání dat zpět do databáze pomocí uložených procedur.

Během tohoto názorného postupu se dozvíte, jak provádět následující úlohy:

  • Vytvořte novou model Windows Forms aplikaci a přidejte do ní soubor LINQ to SQL.

  • Vytvořte třídu entity, která je namapovaná na tabulku Northwind Customers .

  • Vytvořte zdroj dat objektu, který odkazuje na LINQ na třídu SQL Customer .

  • Vytvořte formulář Windows, který obsahuje DataGridView vazbu na Customer třídu.

  • Implementujte funkci ukládání formuláře.

  • Vytvořte DataContext metody přidáním uložených procedur do Návrháře relací objektů.

  • Customer Nakonfigurujte třídu tak, aby používala uložené procedury k provádění vkládání, aktualizací a odstraňování.

Požadavky

Tento názorný postup používá SQL Server Express LocalDB a ukázkovou databázi Northwind.

  1. Pokud nemáte SQL Server Express LocalDB, nainstalujte ho buď ze stránky pro stažení SQL Serveru Express, nebo prostřednictvím Instalační program pro Visual Studio. V Instalační program pro Visual Studio můžete sql Server Express LocalDB nainstalovat jako součást úlohy ukládání a zpracování dat nebo jako jednotlivé komponenty.

  2. Následujícím postupem nainstalujte ukázkovou databázi Northwind:

    1. V sadě Visual Studio otevřete okno Průzkumník objektů SQL Serveru. (SQL Server Průzkumník objektů nainstaluje jako součást úlohy ukládání a zpracování dat v Instalační program pro Visual Studio.) Rozbalte uzel SQL Serveru. Klikněte pravým tlačítkem na instanci LocalDB a vyberte Nový dotaz.

      Otevře se okno editoru dotazů.

    2. Zkopírujte do schránky skript Northwind Transact-SQL. Tento skript T-SQL vytvoří zcela novou databázi Northwind a naplní ji daty.

    3. Vložte skript T-SQL do editoru dotazů a pak zvolte tlačítko Spustit .

      Po krátké době se dotaz dokončí a vytvoří se databáze Northwind.

Vytvoření aplikace a přidání LINQ do tříd SQL

Vzhledem k tomu, že pracujete s třídami LINQ to SQL a zobrazujete data ve formuláři Windows, vytvořte novou aplikaci model Windows Forms a přidejte soubor LINQ do tříd SQL.

Poznámka:

V počítači se můžou zobrazovat různé názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio v tomto článku. Možná používáte jinou edici sady Visual Studio nebo jiné nastavení prostředí. Další informace naleznete v tématu Přizpůsobení integrovaného vývojového prostředí (IDE).

Vytvoření nového projektu aplikace model Windows Forms, který obsahuje třídy LINQ to SQL

  1. V sadě Visual Studio v nabídce Soubor vyberte Nový>projekt.

  2. V levém podokně rozbalte visual C# nebo Visual Basic a pak vyberte Plochu windows.

  3. V prostředním podokně vyberte typ projektu aplikace model Windows Forms.

  4. Pojmenujte projekt UpdatingWithSProcsWalkthrough a pak zvolte OK.

    Vytvoří se projekt UpdatingWithSProcsWalkthrough a přidá se do Průzkumník řešení.

  5. V nabídce Projekt klepněte na tlačítko Přidat novou položku.

  6. Klikněte na šablonu tříd LINQ to SQL a do pole Název zadejte Northwind.dbml.

  7. Klikněte na tlačítko Přidat.

    Do projektu se přidá prázdný soubor TŘÍD LINQ to SQL (Northwind.dbml) a otevře se Návrhář relací objektů.

Vytvoření třídy entity zákazníka a zdroje dat objektu

Vytvořte třídy LINQ to SQL mapované na databázové tabulky přetažením tabulek z Průzkumníka serveru nebo Průzkumníka databáze do Návrháře relací objektů. Výsledkem jsou třídy entit LINQ to SQL, které se mapuje na tabulky v databázi. Po vytvoření tříd entit je možné je použít jako zdroje dat objektů stejně jako jiné třídy, které mají veřejné vlastnosti.

Vytvoření třídy entity Customer a konfigurace zdroje dat s ní

  1. V Průzkumníku serveru nebo Průzkumníku databáze vyhledejte tabulku Customer ve verzi SQL Serveru ukázkové databáze Northwind.

  2. Přetáhněte uzel Zákazníci z Průzkumníkaserveru nebo Průzkumníka databáze na plochu *O/R Designeru.

    Vytvoří se třída entity s názvem Customer . Má vlastnosti, které odpovídají sloupcům v tabulce Customers. Třída entity má název Customer (nikoli Customers), protože představuje jednoho zákazníka z tabulky Customers.

    Poznámka:

    Toto chování přejmenování se nazývá pluralizace. Můžete ho zapnout nebo vypnout v dialogovém okně Možnosti. Další informace naleznete v tématu Postupy: Zapnutí a vypnutí pluralizace (Návrhář relací objektů).

  3. V nabídce Sestavení klepněte na tlačítko Build UpdatingwithSProcsWalkthrough sestavení projektu.

  4. Pokud chcete otevřít okno Zdroje dat, v nabídce Data klikněte na Zobrazit zdroje dat.

  5. V okně Zdroje dat klikněte na Přidat nový zdroj dat.

  6. Na stránce Zvolit typ zdroje dat klikněte na objekt a potom klikněte na Další.

  7. Rozbalte uzel UpdatingwithSProcsWalkthrough a vyhledejte a vyberte třídu Customer.

    Poznámka:

    Pokud není třída Zákazník k dispozici, zrušte průvodce, sestavte projekt a spusťte průvodce znovu.

  8. Kliknutím na tlačítko Dokončit vytvoříte zdroj dat a přidáte třídu entity Customer do okna Zdroje dat.

Vytvoření DataGridView pro zobrazení zákaznických dat ve formuláři Windows Form

Vytvořte ovládací prvky vázané na třídy entit přetažením položek zdroje dat LINQ to SQL z okna Zdroje dat do formuláře Windows.

Přidání ovládacích prvků, které jsou svázané s třídami entit

  1. Otevřete formulář 1 v návrhovém zobrazení.

  2. Z okna Zdroje dat přetáhněte uzel Zákazník do formuláře Form1.

    Poznámka:

    Chcete-li zobrazit okno Zdroje dat, klepněte na tlačítko Zobrazit zdroje dat v nabídce Data .

  3. Otevřete formulář 1 v editoru kódu.

  4. Přidejte do formuláře následující kód, globální do formuláře, mimo jakoukoli konkrétní metodu Form1 , ale uvnitř třídy:

    private NorthwindDataContext northwindDataContext1
        = new NorthwindDataContext();
    
  5. Vytvořte obslužnou rutinu Form_Load události pro událost a přidejte do obslužné rutiny následující kód:

    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Implementace funkcí ukládání

Ve výchozím nastavení není tlačítko Uložit povolené a funkce pro uložení se neimplementuje. Kromě toho se kód nepřidá automaticky pro ukládání změněných dat do databáze při vytváření ovládacích prvků vázaných na data pro zdroje dat objektů. Tato část vysvětluje, jak povolit tlačítko Uložit a implementovat funkce ukládání pro objekty LINQ to SQL.

Implementace funkce ukládání

  1. Otevřete formulář 1 v návrhovém zobrazení.

  2. Vyberte tlačítko Uložit na CustomerBindingNavigator (tlačítko s ikonou diskety).

  3. V okně Vlastnosti nastavte povolenou vlastnost na Hodnotu True.

  4. Poklikáním na tlačítko Uložit vytvořte obslužnou rutinu události a přepněte do Editoru kódu.

  5. Do obslužné rutiny události uložit tlačítko přidejte následující kód:

    northwindDataContext1.SubmitChanges();
    

Přepsat výchozí chování při provádění aktualizací (vložení, aktualizace a odstranění)

Přepsání výchozího chování aktualizace

  1. Otevřete soubor LINQ to SQL v Návrháři relací objektů. (Poklikejte na tlačítko Soubor Northwind.dbml v Průzkumník řešení.)

  2. V Průzkumníku serveru nebo Průzkumníku databáze rozbalte uzel Uložené procedury Northwind a vyhledejte uložené procedury InsertCustomers, UpdateCustomers a DeleteCustomers.

  3. Přetáhněte všechny tři uložené procedury do Návrháře relací objektů.

    Uložené procedury se přidají do podokna metod jako DataContext metody. Další informace naleznete v tématu Metody DataContext (Návrhář relací objektů).

  4. Vyberte třídu entity Customer v Návrháři relací objektů.

  5. V okně Vlastnosti vyberte vlastnost Vložit .

  6. Kliknutím na tři tečky (...) vedle možnosti Použít modul runtime otevřete dialogové okno Konfigurovat chování .

  7. Vyberte Přizpůsobit.

  8. V seznamu Customize vyberte metodu InsertCustomers.

  9. Kliknutím na Tlačítko Použít uložíte konfiguraci pro vybranou třídu a chování.

    Poznámka:

    Chování pro každou kombinaci tříd a chování můžete dál konfigurovat, pokud po provedení každé změny kliknete na Tlačítko Použít . Pokud změníte třídu nebo chování před kliknutím na tlačítko Použít, zobrazí se dialogové okno upozornění s možností použít všechny změny.

  10. V seznamu Chování vyberte Aktualizovat.

  11. Vyberte Přizpůsobit.

  12. V seznamu Přizpůsobit vyberte metodu UpdateCustomers.

    Prohlédněte si seznam argumentů metody a vlastností třídy a všimněte si, že existují dva argumenty metody a dvě vlastnosti třídy pro některé sloupce v tabulce. To usnadňuje sledování změn a vytváření příkazů, které kontrolují porušení souběžnosti.

  13. Namapujte argument metody Original_CustomerID na vlastnost CustomerID (Original).

    Poznámka:

    Ve výchozím nastavení se argumenty metody mapují na vlastnosti třídy, když se názvy shodují. Pokud se názvy vlastností změní a nebudou se shodovat s tabulkou a třídou entity, budete možná muset vybrat ekvivalentní vlastnost třídy, na kterou se má namapovat, pokud Návrhář relací nemůže určit správné mapování. Kromě toho, pokud argumenty metody nemají platné vlastnosti třídy mapovat na, můžete nastavit hodnotu Vlastnosti třídy na (None).

  14. Kliknutím na Tlačítko Použít uložíte konfiguraci pro vybranou třídu a chování.

  15. V seznamu Chování vyberte Odstranit.

  16. Vyberte Přizpůsobit.

  17. V seznamu Customize vyberte metodu DeleteCustomers.

  18. Namapujte argument metody Original_CustomerID na vlastnost CustomerID (Original).

  19. Klikněte na OK.

Poznámka:

I když se nejedná o problém pro tento konkrétní názorný postup, stojí za zmínku, že LINQ to SQL zpracovává hodnoty generované databází automaticky pro identitu (automatické přírůstky), rowguidcol (globálně vygenerovaný globálně jedinečný identifikátor (GUID) a sloupce časového razítka během vkládání a aktualizací. Hodnoty generované databází v jiných typech sloupců neočekávaně způsobí hodnotu null. Chcete-li vrátit hodnoty generované databází, měli byste ručně nastavit IsDbGenerated a na jednu z následujících hodnot: AutoSync.Always, AutoSync.OnInsert nebo AutoSync.OnUpdate.AutoSynctrue

Testování aplikace

Spusťte aplikaci znovu a ověřte, že uložená procedura UpdateCustomers správně aktualizuje záznam zákazníka v databázi.

  1. Stiskněte klávesu F5.

  2. Upravte záznam v mřížce a otestujte chování aktualizace.

  3. Přidejte nový záznam pro otestování chování vložení.

  4. Kliknutím na tlačítko Uložit uložte změny zpět do databáze.

  5. Zavřete formulář.

  6. Stiskněte klávesu F5 a ověřte, že aktualizovaný záznam a nově vložený záznam zůstal zachován.

  7. Odstraňte nový záznam, který jste vytvořili v kroku 3, a otestujte chování odstranění.

  8. Kliknutím na tlačítko Uložit odešlete změny a odeberete odstraněný záznam z databáze.

  9. Zavřete formulář.

  10. Stiskněte klávesu F5 a ověřte, že byl odstraněný záznam z databáze.

    Poznámka:

    Pokud vaše aplikace používá SQL Server Express Edition v závislosti na hodnotě vlastnosti Kopírovat do výstupního adresáře souboru databáze, změny se nemusí zobrazit, když stisknete klávesu F5 v kroku 10.

Další kroky

V závislosti na požadavcích vaší aplikace můžete po vytvoření tříd entit LINQ to SQL provést několika kroky. Mezi vylepšení, která můžete v této aplikaci provést, patří: