Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Klassen DataSet och relaterade klasser är äldre .NET Framework-tekniker från början av 2000-talet som gör det möjligt för program att arbeta med data i minnet medan apparna kopplas från databasen. Teknikerna är särskilt användbara för appar som gör det möjligt för användare att ändra data och spara ändringarna tillbaka till databasen. Även om datauppsättningar är en bevisad framgångsrik teknik är den rekommenderade metoden för nya .NET-program att använda Entity Framework Core. Entity Framework är ett mer naturligt sätt att arbeta med tabelldata som objektmodeller och har ett enklare programmeringsgränssnitt.
LINQ till SQL-verktygen i Visual Studio ger en visuell designyta för att skapa och redigera LINQ till SQL-klasser (entitetsklasser) som baseras på objekt i en databas. Genom att använda LINQ till SQL kan du använda LINQ-teknik för att komma åt SQL-databaser. Mer information finns i LINQ (Language Integrated Query).
Som standard tillhandahålls logiken för att utföra uppdateringar av LINQ till SQL-körmiljö. Körningen skapar standardinstruktionerna Insert, Updateoch Delete baserat på tabellens schema (kolumndefinitionerna och primärnyckelinformationen). När du inte vill använda standardbeteendet kan du konfigurera uppdateringsbeteendet och ange specifika lagrade procedurer för att utföra nödvändiga infogningar, uppdateringar och borttagningar som krävs för att arbeta med data i databasen. Du kan också göra detta när standardbeteendet inte genereras, till exempel när entitetsklasserna mappas till vyer. Dessutom kan du åsidosätta standarduppdateringsbeteendet när databasen kräver tabellåtkomst via lagrade procedurer. Mer information finns i Anpassa åtgärder med hjälp av lagrade procedurer.
Anmärkning
Den här genomgången kräver tillgängligheten för de lagrade procedurerna InsertCustomer, UpdateCustomer och DeleteCustomer för Northwind-databasen.
Den här genomgången ger de steg du måste följa för att åsidosätta standardbeteendet hos LINQ till SQL-körning för att spara data tillbaka i en databas genom att använda lagrade procedurer.
Under den här genomgången får du lära dig hur du utför följande uppgifter:
Skapa ett nytt Windows Forms-program och lägg till en LINQ i SQL-filen i det.
Skapa en entitetsklass som mappas till tabellen Northwind
Customers.Skapa en objektdatakälla som refererar till LINQ till SQL-klassen
Customer.Skapa ett Windows-formulär som innehåller ett DataGridView som är bundet till
Customer-klassen.Implementera spara-funktioner för formuläret.
Skapa DataContext metoder genom att lägga till lagrade procedurer i O/R Designer.
Konfigurera klassen så att den
Customeranvänder lagrade procedurer för att utföra infogningar, uppdateringar och borttagningar.
Förutsättningar
Den här genomgången använder SQL Server Express LocalDB och Northwind-exempeldatabasen.
Om du inte har SQL Server Express LocalDB installerar du det antingen från nedladdningssidan för SQL Server Express eller via Visual Studio Installer. I Visual Studio Installerkan du installera SQL Server Express LocalDB som en del av datalagring och bearbetning arbetsbelastning eller som en enskild komponent.
Installera Northwind-exempeldatabasen genom att följa dessa steg:
Öppna fönstret SQL Server Object Explorer i Visual Studio. (SQL Server Object Explorer installeras som en del av datalagrings- och bearbetningsarbetsbelastningen i Visual Studio Installer.) Expandera SQL Server-noden . Högerklicka på din LocalDB-instans och välj Ny fråga.
Ett frågeredigerarefönster öppnas.
Kopiera Northwind-Transact-SQL-skriptet till urklipp. Det här T-SQL-skriptet skapar Northwind-databasen från grunden och fyller den med data.
Klistra in T-SQL-skriptet i frågeredigeraren och välj sedan knappen Kör.
Efter en kort tid slutförs frågan och Northwind-databasen skapas.
Skapa ett program och lägga till LINQ i SQL-klasser
Eftersom du arbetar med LINQ till SQL-klasser och visar data i ett Windows-formulär skapar du ett nytt Windows Forms-program och lägger till en LINQ i SQL-klassfilen.
Anmärkning
Anvisningarna i den här artikeln illustrerar den senaste versionen av den interaktiva utvecklingsupplevelsen (IDE) som är tillgänglig i Visual Studio. Datorn kan visa olika namn eller platser för vissa av användargränssnittselementen. Du kanske använder en annan version av Visual Studio eller andra miljöinställningar. Mer information finns i Anpassa IDE-.
Skapa ett nytt Windows Forms Application-projekt som innehåller LINQ till SQL-klasser
I Visual Studio går du till arkivmenyn och väljer Nytt>projekt.
Expandera antingen Visual C# eller Visual Basic i det vänstra fönstret och välj sedan Windows Desktop.
I den mellersta rutan väljer du projekttypen Windows Forms App .
Ge projektet namnet UpdatingWithSProcsWalkthrough och välj sedan OK.
Projektet UpdatingWithSProcsWalkthrough skapas och läggs till i Solution Explorer.
På menyn Project klickar du på Lägg till nytt objekt.
Klicka på mallen LINQ till SQL-klasser och skriv Northwind.dbml i rutan Namn .
Klicka på Lägg till.
En tom LINQ till SQL-klassfilen (Northwind.dbml) läggs till i projektet och O/R Designer öppnas.
Skapa kundentitetsklassen och objektdatakällan
Skapa LINQ till SQL-klasser som mappas till databastabeller genom att dra tabeller från Server Explorer eller Database Explorer till O/R Designer. Resultatet är LINQ till SQL-entitetsklasser som kartlägger tabellerna i databasen. När du har skapat entitetsklasser kan de användas som objektdatakällor precis som andra klasser som har offentliga egenskaper.
Skapa en kundentitetsklass och konfigurera en datakälla med den
Leta upp tabellen Kund i SQL Server-versionen av Northwind-exempeldatabasen i Server Explorer eller Databasutforskaren.
Dra noden Kunder från Server Explorer eller Database Explorer till *O/R Designer-ytan .
En entitetsklass med namnet Customer skapas. Den har egenskaper som motsvarar kolumnerna i tabellen Kunder. Entitetsklassen heter Customer (inte Customers) eftersom den representerar en enskild kund från tabellen Kunder.
Anmärkning
Det här beteendet för namnbyte kallas pluralisering. Den kan aktiveras eller inaktiveras i dialogrutan Alternativ. Mer information finns i Så här: Aktivera och inaktivera pluralisering (O/R Designer).
På menyn Skapa klickar du på Skapa uppdateringmedSProcsWalkthrough för att skapa projektet.
Öppna fönstret Datakällor genom att klicka på Visa datakällor på menyn Data.
I fönstret datakällor klickar du på Lägg till ny datakälla.
Klicka på Objekt på sidan Välj datakälltyp och välj sedan Nästa.
Expandera noden UpdatingwithSProcsWalkthrough och leta upp och välj klassen Kund .
Anmärkning
Om klassen Kund inte är tillgänglig stänger du guiden, bygger projektet och kör guiden igen.
Klicka på Slutför för att skapa datakällan och lägg till entitetsklassen Kund i fönstret Datakällor .
Skapa en DataGridView för att visa kunddata i ett Windows-formulär
Skapa kontroller som är bundna till entitetsklasser genom att dra LINQ till SQL-datakällobjekt från fönstret Datakällor till ett Windows-formulär.
Så här lägger du till kontroller som är bundna till entitetsklasserna
Öppna Form1 i designvyn.
Dra noden Kund till Formulär1 från fönstret Datakällor.
Anmärkning
Om du vill visa fönstret Datakällor klickar du på Visa datakällor på menyn Data .
Öppna Formulär1 i kodredigeraren.
Lägg till följande kod i formuläret, globalt i formuläret, utanför någon specifik metod, men i
Form1klassen:Skapa en händelsehanterare för
Form_Loadhändelsen och lägg till följande kod i hanteraren:
Implementera funktioner för sparande
Som standard är spara-knappen inte aktiverad och funktionen Spara implementeras inte. Dessutom läggs inte kod till automatiskt för att spara ändrade data i databasen när databundna kontroller skapas för objektdatakällor. I det här avsnittet beskrivs hur du aktiverar spara-knappen och implementerar spara-funktioner för LINQ till SQL-objekt.
Så här implementerar du spara-funktioner
Öppna Form1 i designvyn.
Välj knappen Spara på CustomerBindingNavigator (knappen med diskettdiskikonen).
I fönstret Egenskaper anger du egenskapen Aktiverad till Sant.
Dubbelklicka på knappen Spara för att skapa en händelsehanterare och växla till kodredigeraren.
Lägg till följande kod i händelsehanteraren för spara-knappen:
Åsidosätt standardbeteendet för att utföra uppdateringar (infogningar, uppdateringar och borttagningar)
Så här åsidosätter du standarduppdateringsbeteendet
Öppna LINQ till SQL-filen i O/R Designer. (Dubbelklicka på filen Northwind.dbml i Solution Explorer.)
I Server Explorer eller Database Explorer expanderar du noden Lagrade procedurer för Northwind-databaser och letar upp de lagrade procedurerna InsertCustomers, UpdateCustomers och DeleteCustomers .
Dra alla tre lagrade procedurer till O/R Designer.
De lagrade procedurerna läggs till i metodfönstret som DataContext metoder. Mer information finns i DataContext-metoder (O/R Designer).
Välj klassen Kundentitet i O/R Designer.
I fönstret Egenskaper väljer du egenskapen Infoga .
Klicka på ellipsen (...) bredvid Använd Runtime för att öppna dialogrutan Konfigurera beteende .
Välj Anpassa.
Välj metoden InsertCustomers i listan Anpassa .
Klicka på Använd för att spara konfigurationen för den valda klassen och beteendet.
Anmärkning
Du kan fortsätta att konfigurera beteendet för varje kombination av klass/beteende så länge du klickar på Använd när du har ändrat dem. Om du ändrar klassen eller beteendet innan du klickar på Använd visas en varningsdialogruta som ger möjlighet att tillämpa ändringar.
Välj Uppdatera i listan Beteende .
Välj Anpassa.
Välj metoden UpdateCustomers i listan Anpassa .
Granska listan över metodargument och klassegenskaper och observera att det finns två metodargument och två klassegenskaper för vissa kolumner i tabellen. Detta gör det enklare att spåra ändringar och skapa uttalanden som söker efter samtidighetsöverträdelser.
Mappa Original_CustomerID-metodargumentet till klassegenskapen CustomerID (Original).
Anmärkning
Som standard mappas metodargument till klassegenskaper när namnen matchar. Om egenskapsnamnen ändras och inte längre matchar mellan tabellen och entitetsklassen kan du behöva välja motsvarande klassegenskap att mappa till om O/R Designer inte kan fastställa rätt mappning. Om metodargumenten inte har giltiga klassegenskaper att mappa till kan du dessutom ange värdet Klassegenskaper till (Ingen)..
Klicka på Använd för att spara konfigurationen för den valda klassen och beteendet.
Välj Ta bort i listan Beteende .
Välj Anpassa.
Välj metoden DeleteCustomers i listan Anpassa .
Mappa Original_CustomerID-metodargumentet till klassegenskapen CustomerID (Original).
Klicka på OK.
Anmärkning
Även om det inte är ett problem för den här genomgången är det värt att notera att LINQ till SQL hanterar databasgenererade värden automatiskt för identitet (automatisk inkrement), rowguidcol (databasgenererad globalt unik identifierare (GUID)) och tidsstämpelkolumner under infogningar och uppdateringar. Databasgenererade värden i andra kolumntyper resulterar oväntat i ett null-värde. Om du vill returnera de databasgenererade värdena bör du manuellt ange IsDbGenerated till true och AutoSync till något av följande: AutoSync.Always, AutoSync.OnInsert eller AutoSync.OnUpdate.
Testa programmet
Kör programmet igen för att kontrollera att den lagrade proceduren UpdateCustomers uppdaterar kundposten i databasen korrekt.
Tryck på F5.
Ändra en post i rutnätet för att testa uppdateringsbeteendet.
Lägg till en ny post för att testa infogningsbeteendet.
Klicka på knappen Spara för att spara ändringarna i databasen igen.
Stäng formuläret.
Tryck på F5 och kontrollera att den uppdaterade posten och den nyligen infogade posten bevarades.
Ta bort den nya post som du skapade i steg 3 för att testa borttagningsbeteendet.
Klicka på knappen Spara för att skicka ändringarna och ta bort den borttagna posten från databasen.
Stäng formuläret.
Tryck på F5 och kontrollera att den borttagna posten har tagits bort från databasen.
Anmärkning
Om ditt program använder SQL Server Express Edition, beroende på värdet för egenskapen Kopiera till utdatakatalog för databasfilen, kanske ändringarna inte visas när du trycker på F5 i steg 10.
Nästa steg
Beroende på dina programkrav finns det flera steg som du kanske vill utföra när du har skapat LINQ till SQL-entitetsklasser. Några förbättringar som du kan göra i det här programmet är bland annat följande:
Implementera samtidighetskontroll under uppdateringar. Mer information finns i Optimistisk samtidighet: översikt.
Lägg till LINQ-frågor för att filtrera data. Mer information finns i Introduktion till LINQ-frågor (C#).