Genomgång: Enkel objektmodell och fråga (Visual Basic)
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 Basic Development Inställningar.
Förutsättningar
Den här genomgången använder en dedikerad mapp ("c:\linqtest") 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:\linqtest.
Ö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å Arkiv-menyn klickar du på Nytt projekt.
I fönstret Projekttyper i dialogrutan Nytt projekt klickar du på Visual Basic.
I fönstret Mallar klickar du på Konsolprogram.
I rutan Namn skriver du LinqConsoleApp.
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 (klicka på Visa alla filer i Solution Explorer och expandera noden Referenser ) 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.
I dialogrutan Lägg till referens klickar du också på .NET, bläddrar till och klickar på System.Windows.Forms och klickar sedan på OK.
Den här sammansättningen, som stöder meddelanderutan i genomgången, läggs till i projektet.
Lägg till följande direktiv ovan
Module1
:Imports System.Data.Linq Imports System.Data.Linq.Mapping Imports System.Windows.Forms
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 Module1.vb omedelbart ovanför
Sub Main
:<Table(Name:="Customers")> _ Public Class Customer End Class
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 Module1.vb strax före
End Class
:Private _CustomerID As String <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _ Public Property CustomerID() As String Get Return Me._CustomerID End Get Set(ByVal value As String) Me._CustomerID = value End Set End Property Private _City As String <Column(Storage:="_City")> _ Public Property City() As String Get Return Me._City End Get Set(ByVal value As String) Me._City = value End Set End Property
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(Of 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
Sub Main
metoden.Observera att
northwnd.mdf
filen antas finnas i mappen linqtest. Mer information finns i avsnittet Förutsättningar tidigare i den här genomgången.' Use a connection string. Dim db As New DataContext _ ("c:\linqtest\northwnd.mdf") ' Get a typed table to run queries. Dim Customers As Table(Of Customer) = _ db.GetTable(Of 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
Sub Main
metoden efter deklarationenTable(Of Customer)
:' Attach the log to show generated SQL in a console window. db.Log = Console.Out ' Query for customers in London. Dim 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 For Each
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
Sub Main
metoden (efter frågebeskrivningen):' Format the message box. Dim msg As String = "", title As String = "London customers:", _ response As MsgBoxResult, style As MsgBoxStyle = _ MsgBoxStyle.Information ' Execute the query. For Each custObj In custQuery msg &= String.Format(custObj.CustomerID & vbCrLf) Next ' Display the results. response = MsgBox(msg, style, title)
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).
Meddelanderutan visar en lista med sex kunder. Konsolfönstret visar den genererade SQL-koden.
Klicka på OK för att stänga meddelanderutan.
Programmet stängs.
På menyn File (Arkiv) klickar du på Save All (Spara alla).
Du behöver det här programmet om du fortsätter med nästa genomgång.
Nästa steg
Avsnittet Genomgång: Fråga över relationer (Visual Basic) fortsätter där den här genomgången slutar. Genomgången Fråga över 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 över relationer ska du spara lösningen för den genomgång som du just har slutfört, vilket är en förutsättning.