Genomgång: Fråga mellan relationer (Visual Basic)
Den här genomgången visar hur LINQ till SQL-associationer används för att representera sekundärnyckelrelationer i databasen.
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
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
Customer
klassen för att förbättra relationen mellan klassernaCustomer
ochOrder
.Skapa och köra en fråga för att testa processen för att
Order
hämta information med hjälpCustomer
av klassen.
Mappa relationer mellan tabeller
Efter klassdefinitionen Customer
skapar du entitetsklassdefinitionen Order
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
Customer
klassen:<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 Customer
du klassen för att ange dess relation till Order
klassen. (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
Customer
klassen: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 kundbeställningsrelationen
Nu kan du komma åt Order
objekt direkt från objekten Customer
eller i motsatt ordning. Du behöver ingen explicit koppling mellan kunder och beställningar.
Så här kommer du åt Order-objekt med hjälp av kundobjekt
Sub Main
Ändra metoden genom 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 databasen
Det är mycket enklare att börja med en starkt skriven vy av databasen. Genom att DataContext starkt skriva objektet behöver du inte anrop till GetTable. Du kan använda starkt skrivna tabeller i alla dina frågor när du använder det starkt skrivna DataContext objektet.
I följande steg skapar Customers
du som en starkt skriven tabell som mappar till tabellen Kunder i databasen.
Så här skriver du datacontextobjektet
Lägg till följande kod ovanför klassdeklarationen
Customer
.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 Main
om 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=WHITC
Tryck 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.