Genomgång: Enkel objektmodell och fråga (C#)
Den här genomgången ger ett grundläggande LINQ till SQL-scenario från slutpunkt till slutpunkt med minimal komplexitet. Du skapar en entitetsklass som modellerar tabellen Kunder i northwind-exempeldatabasen. Sedan skapar du en enkel fråga för att lista kunder som finns i London.
Den här genomgången är kodorienterad av design för att visa LINQ till SQL-begrepp. Normalt sett använder du objektrelationsdesignern för att skapa objektmodellen.
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 använder en dedikerad mapp ("c:\linqtest5") för att lagra filer. Skapa den här mappen innan du påbörjar genomgången.
Den här genomgången kräver 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 till mappen c:\linqtest5.
Översikt
Den här genomgången består av sex huvuduppgifter:
Skapa en LINQ till SQL-lösning i Visual Studio.
Mappa en klass till en databastabell.
Ange egenskaper för klassen som ska representera databaskolumner.
Ange anslutningen till Northwind-databasen.
Skapa en enkel fråga som ska köras mot databasen.
Köra frågan och observera resultaten.
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 LinqConsoleApp.
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 (expandera noden Referenser i Solution Explorer) lägger du till den, 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;
Mappa en klass till en databastabell
I det här steget skapar du en klass och mappar den till en databastabell. En sådan klass kallas en entitetsklass. Observera att mappningen utförs genom att bara lägga till TableAttribute attributet. Egenskapen Name anger namnet på tabellen i databasen.
Skapa en entitetsklass och mappa den till en databastabell
Skriv eller klistra in följande kod i Program.cs omedelbart ovanför klassdeklarationen
Program
:[Table(Name = "Customers")] public class Customer { }
Ange egenskaper för klassen för att representera databaskolumner
I det här steget utför du flera uppgifter.
Du använder ColumnAttribute attributet för att ange
CustomerID
ochCity
egenskaper för entitetsklassen som representerar kolumner i databastabellen.Du anger egenskapen
CustomerID
som representerar en primärnyckelkolumn i databasen.Du anger
_CustomerID
och_City
fält för privat lagring. LINQ till SQL kan sedan lagra och hämta värden direkt, i stället för att använda offentliga accessorer som kan innehålla affärslogik.
Så här representerar du egenskaper för två databaskolumner
Skriv eller klistra in följande kod i Program.cs inuti klammerparenteserna för
Customer
klassen.private string _CustomerID; [Column(IsPrimaryKey=true, Storage="_CustomerID")] public string CustomerID { get { return this._CustomerID; } set { this._CustomerID = value; } } private string _City; [Column(Storage="_City")] public string City { get { return this._City; } set { this._City=value; } }
Ange Anslut ion till Northwind-databasen
I det här steget använder du ett DataContext objekt för att upprätta en anslutning mellan dina kodbaserade datastrukturer och själva databasen. DataContext är den huvudkanal genom vilken du hämtar objekt från databasen och skickar ändringar.
Du deklarerar också en Table<Customer>
för att fungera som den logiska, typerade tabellen för dina frågor mot tabellen Kunder i databasen. Du skapar och kör dessa frågor i senare steg.
Så här anger du databasanslutningen
Skriv eller klistra in följande kod i
Main
metoden.Observera att
northwnd.mdf
filen antas finnas i mappen linqtest5. Mer information finns i avsnittet Förutsättningar tidigare i den här genomgången.// Use a connection string. DataContext db = new DataContext (@"c:\linqtest5\northwnd.mdf"); // Get a typed table to run queries. Table<Customer> Customers = db.GetTable<Customer>();
Skapa en enkel fråga
I det här steget skapar du en fråga för att hitta vilka kunder i tabellen Kunder i databasen som finns i London. Frågekoden i det här steget beskriver bara frågan. Den kör den inte. Den här metoden kallas för uppskjuten körning. Mer information finns i Introduktion till LINQ-frågor (C#).
Du kommer också att skapa en loggutdata för att visa DE SQL-kommandon som LINQ till SQL genererar. Den här loggningsfunktionen (som använder Log) är användbar vid felsökning och för att fastställa att kommandona som skickas till databasen korrekt representerar din fråga.
Skapa en enkel fråga
Skriv eller klistra in följande kod i
Main
metoden efter deklarationenTable<Customer>
.// Attach the log to show generated SQL. db.Log = Console.Out; // Query for customers in London. IQueryable<Customer> custQuery = from cust in Customers where cust.City == "London" select cust;
Köra frågan
I det här steget kör du faktiskt frågan. De frågeuttryck som du skapade i föregående steg utvärderas inte förrän resultaten behövs. När du påbörjar iterationen foreach
körs ett SQL-kommando mot databasen och objekt materialiseras.
Så här kör du frågan
Skriv eller klistra in följande kod i slutet av
Main
metoden (efter frågebeskrivningen).foreach (Customer cust in custQuery) { Console.WriteLine("ID={0}, City={1}", cust.CustomerID, cust.City); } // Prevent console window from closing. Console.ReadLine();
Tryck på F5 för att felsöka programmet.
Kommentar
Om ditt program genererar ett körningsfel kan du läsa avsnittet Felsökning i Learning by Walkthroughs (Felsökning efter genomgång).
Frågeresultatet i konsolfönstret bör visas på följande sätt:
ID=AROUT, City=London
ID=BSBEV, City=London
ID=CONSH, City=London
ID=EASTC, City=London
ID=NORTS, City=London
ID=SEVES, City=London
Tryck på Retur i konsolfönstret för att stänga programmet.
Nästa steg
Avsnittet Genomgång: Fråga över relationer (C#) fortsätter där den här genomgången slutar. Genomgången Fråga mellan relationer visar hur LINQ till SQL kan köra frågor mellan tabeller, ungefär som kopplingar i en relationsdatabas.
Om du vill göra genomgången Fråga mellan relationer ska du spara lösningen för den genomgång som du just har slutfört, vilket är en förutsättning.