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.
Den här genomgången visar användningen av LINQ till SQL associationer för att representera sekundärnyckelrelationer i databasen.
Anmärkning
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 Anpassning av utvecklingsmiljön.
Den här genomgången skrevs med hjälp av Visual Basic Development Settings.
Förutsättningar
Du måste ha slutfört genomgången: Enkel objektmodell och fråga (Visual Basic). Den här genomgången bygger på den, inklusive förekomsten av filen northwnd.mdf i c:\linqtest.
Översikt
Den här genomgången består av tre huvuduppgifter:
Lägga till en entitetsklass för att representera tabellen Beställningar i northwind-exempeldatabasen.
Komplettera anteckningar till klassen
Customerför att förbättra relationen mellan deCustomer- ochOrderklasserna.Skapa och köra en fråga för att testa processen att hämta
Orderinformation med hjälp avCustomerklassen.
Mappa relationer mellan tabeller
Efter Customer-klassdefinitionen skapar du den Order entitetsklassdefinition som innehåller följande kod, vilket anger att Orders.Customer relaterar som en sekundärnyckel till Customers.CustomerID.
Så här lägger du till entitetsklassen Order
Skriv eller klistra in följande kod efter klassen
Customer:<Table(Name:="Orders")> _ Public Class Order Private _OrderID As Integer Private _CustomerID As String Private _Customers As EntityRef(Of Customer) Public Sub New() Me._Customers = New EntityRef(Of Customer)() End Sub <Column(Storage:="_OrderID", DbType:="Int NOT NULL IDENTITY", _ IsPrimaryKey:=True, IsDBGenerated:=True)> _ Public ReadOnly Property OrderID() As Integer Get Return Me._OrderID End Get End Property ' No need to specify a setter because IsDBGenerated is true. <Column(Storage:="_CustomerID", DbType:="NChar(5)")> _ Public Property CustomerID() As String Get Return Me._CustomerID End Get Set(ByVal value As String) Me._CustomerID = value End Set End Property <Association(Storage:="_Customers", ThisKey:="CustomerID")> _ Public Property Customers() As Customer Get Return Me._Customers.Entity End Get Set(ByVal value As Customer) Me._Customers.Entity = value End Set End Property End Class
Kommentera kundklassen
I det här steget kommenterar du klassen Customer för att ange dess relation till klassen Order. (Detta tillägg är inte absolut nödvändigt, eftersom det räcker att definiera relationen i båda riktningarna för att skapa länken. Men om du lägger till den här anteckningen kan du enkelt navigera i objekt i båda riktningarna.)
Så här kommenterar du kundklassen
Skriv eller klistra in följande kod i klassen
Customer:Private _Orders As EntitySet(Of Order) Public Sub New() Me._Orders = New EntitySet(Of Order)() End Sub <Association(Storage:="_Orders", OtherKey:="CustomerID")> _ Public Property Orders() As EntitySet(Of Order) Get Return Me._Orders End Get Set(ByVal value As EntitySet(Of Order)) Me._Orders.Assign(value) End Set End Property
Skapa och köra en fråga i Customer-Order relation
Nu kan du komma åt Order objekt direkt från Customer objekt eller i motsatt ordning. Du behöver ingen explicit koppling mellan kunder och ordrar.
Så här kommer du åt Order-objekt med hjälp av kundobjekt
Ändra metoden
Sub Maingenom att skriva eller klistra in följande kod i metoden:' Query for customers who have no orders. Dim custQuery = _ From cust In Customers _ Where Not cust.Orders.Any() _ Select cust Dim msg As String = "", title As String = _ "Customers With No Orders", response As MsgBoxResult, _ style As MsgBoxStyle = MsgBoxStyle.Information For Each custObj In custQuery msg &= String.Format(custObj.CustomerID & vbCrLf) Next response = MsgBox(msg, style, title)Tryck på F5 för att felsöka programmet.
Två namn visas i meddelanderutan och konsolfönstret visar den genererade SQL-koden.
Stäng meddelanderutan för att sluta felsöka.
Skapa en starkt typad vy av din databas
Det är mycket enklare att börja med en starkt skriven vy av databasen. Genom stark typning av DataContext-objektet behöver du inga anrop till GetTable. Du kan använda starkt skrivna tabeller i alla dina frågor när du använder det starkt inskrivna DataContext-objektet.
I följande steg skapar du Customers som en starkt skriven tabell som mappar till tabellen Kunder i databasen.
Att starkt typa datacontextobjektet
Lägg till följande kod ovanför
Customer-klassdeklarationen.Public Class Northwind Inherits DataContext ' Table(Of T) abstracts database details per ' table/data type. Public Customers As Table(Of Customer) Public Orders As Table(Of Order) Public Sub New(ByVal connection As String) MyBase.New(connection) End Sub End ClassÄndra
Sub Mainom du vill använda de starkt inskrivna DataContext på följande sätt:' Use a connection string. Dim db As New Northwind _ ("C:\linqtest\northwnd.mdf") ' Query for customers from Seattle. Dim custs = _ From cust In db.Customers _ Where cust.City = "Seattle" _ Select cust For Each custObj In custs Console.WriteLine("ID=" & custObj.CustomerID) Next ' Freeze the console window. Console.ReadLine()Tryck på F5 för att felsöka programmet.
Konsolfönstrets utdata är:
ID=WHITCTryck på Retur i konsolfönstret för att stänga programmet.
På Arkiv-menyn klickar du på Spara alla om du vill spara det här programmet.
Nästa steg
Nästa genomgång (genomgång: Manipulera data (Visual Basic)) visar hur du manipulerar data. Den här genomgången kräver inte att du sparar de två genomgångarna i den här serien som du redan har slutfört.