Genomgång: Manipulera data (C#)
Den här genomgången innehåller ett grundläggande LINQ till SQL-scenario från slutpunkt till slutpunkt för att lägga till, ändra och ta bort data i en databas. Du använder en kopia av Northwind-exempeldatabasen för att lägga till en kund, ändra namnet på en kund och ta bort en beställning.
Kommentar
Datorn kan visa olika namn eller platser för vissa av Visual Studio-användargränssnittselementen i följande instruktioner. Den Visual Studio-utgåva som du har och de inställningar som du använder avgör dessa element. Mer information finns i Anpassa IDE.
Den här genomgången skrevs med hjälp av Visual C# Development Inställningar.
Förutsättningar
Den här genomgången kräver följande:
Den här genomgången använder en dedikerad mapp ("c:\linqtest6") för att lagra filer. Skapa den här mappen innan du påbörjar genomgången.
Northwind-exempeldatabasen.
Om du inte har den här databasen på utvecklingsdatorn kan du ladda ned den från Microsofts nedladdningswebbplats. Anvisningar finns i Ladda ned exempeldatabaser. När du har laddat ned databasen kopierar du filen northwnd.mdf till mappen c:\linqtest6.
En C#-kodfil som genererats från Northwind-databasen.
Du kan generera den här filen med hjälp av antingen Object Relational Designer eller SQLMetal-verktyget. Den här genomgången skrevs med hjälp av SQLMetal-verktyget med följande kommandorad:
sqlmetal /code:"c:\linqtest6\northwind.cs" /language:csharp "C:\linqtest6\northwnd.mdf" /pluralize
Mer information finns i SqlMetal.exe (kodgenereringsverktyg).
Översikt
Den här genomgången består av sex huvuduppgifter:
Skapa LINQ till SQL-lösningen i Visual Studio.
Lägga till databaskodfilen i projektet.
Skapa ett nytt kundobjekt.
Ändra kontaktnamnet för en kund.
Tar bort en order.
Skicka dessa ändringar till Northwind-databasen.
Skapa en LINQ till SQL-lösning
I den första uppgiften skapar du en Visual Studio-lösning som innehåller de referenser som krävs för att skapa och köra ett LINQ-projekt till SQL.
Så här skapar du en LINQ-till SQL-lösning
På Visual Studio File-menyn pekar du på Ny och klickar sedan på Projekt.
I fönstret Projekttyper i dialogrutan Nytt projekt klickar du på Visual C#.
I fönstret Mallar klickar du på Konsolprogram.
I rutan Namn skriver du LinqDataManipulationApp.
I rutan Plats kontrollerar du var du vill lagra dina projektfiler.
Klicka på OK.
Lägga till LINQ-referenser och -direktiv
Den här genomgången använder sammansättningar som kanske inte installeras som standard i projektet. Om System.Data.Linq inte visas som en referens i projektet lägger du till det, enligt beskrivningen i följande steg:
Så här lägger du till System.Data.Linq
Högerklicka på Referenser i Solution Explorer och klicka sedan på Lägg till referens.
I dialogrutan Lägg till referens klickar du på .NET, klickar på sammansättningen System.Data.Linq och klickar sedan på OK.
Sammansättningen läggs till i projektet.
Lägg till följande direktiv överst i Program.cs:
using System.Data.Linq; using System.Data.Linq.Mapping;
Lägga till Northwind-kodfilen i projektet
De här stegen förutsätter att du har använt SQLMetal-verktyget för att generera en kodfil från Northwind-exempeldatabasen. Mer information finns i avsnittet Förutsättningar tidigare i den här genomgången.
Så här lägger du till northwind-kodfilen i projektet
På Projekt-menyn klickar du på Lägg till befintligt objekt.
I dialogrutan Lägg till befintligt objekt navigerar du till c:\linqtest6\northwind.cs och klickar sedan på Lägg till.
Filen northwind.cs läggs till i projektet.
Konfigurera database Anslut ion
Testa först anslutningen till databasen. Observera särskilt att databasen Northwnd inte har något i-tecken. Om du genererar fel i nästa steg granskar du filen northwind.cs för att avgöra hur den partiella Klassen Northwind stavas.
Konfigurera och testa databasanslutningen
Skriv eller klistra in följande kod i
Main
-metoden i klassen Program:// Use the following connection string. Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf"); // Keep the console window open after activity stops. Console.ReadLine();
Tryck på F5 för att testa programmet nu.
Ett konsolfönster öppnas.
Du kan stänga programmet genom att trycka på Retur i konsolfönstret eller genom att klicka på Stoppa felsökning på Visual Studio-felsökningsmenyn.
Skapa en ny entitet
Det är enkelt att skapa en ny entitet. Du kan skapa objekt (till exempel Customer
) med hjälp av nyckelordet new
.
I det här och följande avsnitt gör du bara ändringar i den lokala cachen. Inga ändringar skickas till databasen förrän du anropar SubmitChanges mot slutet av den här genomgången.
Så här lägger du till ett nytt kundentitetsobjekt
Skapa en ny
Customer
genom att lägga till följande kod tidigareConsole.ReadLine();
iMain
-metoden:// Create the new Customer object. Customer newCust = new Customer(); newCust.CompanyName = "AdventureWorks Cafe"; newCust.CustomerID = "ADVCA"; // Add the customer to the Customers table. db.Customers.InsertOnSubmit(newCust); Console.WriteLine("\nCustomers matching CA before insert"); foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA"))) { Console.WriteLine("{0}, {1}, {2}", c.CustomerID, c.CompanyName, c.Orders.Count); }
Tryck på F5 för att felsöka lösningen.
Tryck på Retur i konsolfönstret för att sluta felsöka och fortsätta genomgången.
Uppdatera en entitet
I följande steg hämtar du ett Customer
objekt och ändrar en av dess egenskaper.
Ändra namnet på en kund
Lägg till följande kod ovan
Console.ReadLine();
:// Query for specific customer. // First() returns one object rather than a collection. var existingCust = (from c in db.Customers where c.CustomerID == "ALFKI" select c) .First(); // Change the contact name of the customer. existingCust.ContactName = "New Contact";
Ta bort en entitet
Med samma kundobjekt kan du ta bort den första beställningen.
Följande kod visar hur du bryter relationer mellan rader och hur du tar bort en rad från databasen. Lägg till följande kod innan för Console.ReadLine
att se hur objekt kan tas bort:
Ta bort en rad
Lägg till följande kod precis ovanför
Console.ReadLine();
:// Access the first element in the Orders collection. Order ord0 = existingCust.Orders[0]; // Access the first element in the OrderDetails collection. OrderDetail detail0 = ord0.OrderDetails[0]; // Display the order to be deleted. Console.WriteLine ("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}", detail0.OrderID, detail0.ProductID); // Mark the Order Detail row for deletion from the database. db.OrderDetails.DeleteOnSubmit(detail0);
Skicka ändringar till databasen
Det sista steget som krävs för att skapa, uppdatera och ta bort objekt är att faktiskt skicka ändringarna till databasen. Utan det här steget är dina ändringar bara lokala och visas inte i frågeresultaten.
Skicka ändringar till databasen
Infoga följande kod precis ovanför
Console.ReadLine
:db.SubmitChanges();
Infoga följande kod (efter
SubmitChanges
) för att visa före- och eftereffekterna av att skicka ändringarna:Console.WriteLine("\nCustomers matching CA after update"); foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA"))) { Console.WriteLine("{0}, {1}, {2}", c.CustomerID, c.CompanyName, c.Orders.Count); }
Tryck på F5 för att felsöka lösningen.
Tryck på Retur i konsolfönstret för att stänga programmet.
Kommentar
När du har lagt till den nya kunden genom att skicka ändringarna kan du inte köra den här lösningen igen som den är. Om du vill köra lösningen igen ändrar du namnet på kundens och kundens ID som ska läggas till.