Delen via


Overzicht: query's uitvoeren op relaties (Visual Basic)

In dit scenario ziet u hoe LINQ naar SQL-koppelingen wordt gebruikt om relaties met refererende sleutels in de database weer te geven.

Notitie

Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDE (Personalizing the IDE) voor meer informatie.

Deze procedure is geschreven met behulp van Visual Basic Development Instellingen.

Vereisten

U moet een overzicht hebben voltooid: Eenvoudig objectmodel en -query (Visual Basic). Deze procedure bouwt voort op dat bestand, inclusief de aanwezigheid van het northwnd.mdf-bestand in c:\linqtest.

Overzicht

Deze procedure bestaat uit drie hoofdtaken:

  • Voeg een entiteitsklasse toe om de tabel Orders in de northwind-voorbeelddatabase weer te geven.

  • Het aanvullen van aantekeningen aan de Customer klasse om de relatie tussen de Customer en Order klassen te verbeteren.

  • Een query maken en uitvoeren om het proces van het verkrijgen Order van informatie te testen met behulp van de Customer klasse.

Toewijzingsrelaties tussen tabellen

Maak na de Customer klassedefinitie de definitie van de Order entiteitsklasse die de volgende code bevat, die aangeeft dat Orders.Customer deze betrekking heeft op een refererende sleutel.Customers.CustomerID

De entiteitsklasse Order toevoegen

  • Typ of plak de volgende code na de Customer klasse:

    <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
    

Aantekeningen toevoegen aan de klantklasse

In deze stap maakt u aantekeningen voor de klasse om de Customer relatie met de Order klasse aan te geven. (Deze toevoeging is niet strikt noodzakelijk, omdat het definiƫren van de relatie in beide richtingen voldoende is om de koppeling te maken. Maar door deze aantekening toe te voegen, kunt u eenvoudig door objecten in beide richtingen navigeren.)

Aantekeningen toevoegen aan de klasse Klant

  • Typ of plak de volgende code in de Customer klasse:

    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
    

Een query maken en uitvoeren in de klantorderrelatie

U kunt nu rechtstreeks vanuit de Customer objecten of in omgekeerde volgorde toegang krijgen tot Order objecten. U hebt geen expliciete deelname tussen klanten en orders nodig.

Toegang krijgen tot Orderobjecten met behulp van klantobjecten

  1. Wijzig de Sub Main methode door de volgende code in de methode te typen of te plakken:

    ' 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)
    
  2. Druk op F5 om fouten in uw toepassing op te sporen.

    Er worden twee namen weergegeven in het berichtvak en in het consolevenster wordt de gegenereerde SQL-code weergegeven.

  3. Sluit het berichtvak om de foutopsporing te stoppen.

Een sterk getypte weergave van uw database maken

Het is veel eenvoudiger om te beginnen met een sterk getypte weergave van uw database. Door het DataContext object sterk te typen, hoeft u geen aanroepen te doen GetTable. U kunt sterk getypte tabellen in al uw query's gebruiken wanneer u het sterk getypte DataContext object gebruikt.

In de volgende stappen maakt Customers u een sterk getypte tabel die is toegewezen aan de tabel Klanten in de database.

Het DataContext-object sterk typen

  1. Voeg de volgende code toe boven de Customer klassedeclaratie.

    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
    
  2. Wijzig Sub Main het gebruik van de sterk getypte DataContext als volgt:

    ' 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()
    
  3. Druk op F5 om fouten in uw toepassing op te sporen.

    De uitvoer van het consolevenster is:

    ID=WHITC

  4. Druk op Enter in het consolevenster om de toepassing te sluiten.

  5. Klik in het menu Bestand op Alles opslaan als u deze toepassing wilt opslaan.

Volgende stappen

In het volgende scenario (Walkthrough: Gegevens bewerken (Visual Basic)) ziet u hoe u gegevens bewerkt. Deze procedure vereist niet dat u de twee scenario's in deze reeks die u al hebt voltooid, opslaat.

Zie ook