Udostępnij za pośrednictwem


Przewodnik: Wykonywanie zapytań w relacjach (Visual Basic)

W tym przewodniku przedstawiono użycie skojarzeń LINQ to SQL do reprezentowania relacji klucza obcego w bazie danych.

Uwaga

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Ten przewodnik został napisany przy użyciu programu Visual Basic Development Ustawienia.

Wymagania wstępne

Musisz ukończyć przewodnik: prosty model obiektów i zapytanie (Visual Basic). Ten przewodnik opiera się na tym, w tym obecności pliku northwnd.mdf w c:\linqtest.

Omówienie

Ten przewodnik składa się z trzech głównych zadań:

  • Dodanie klasy jednostki do reprezentowania tabeli Orders (Zamówienia) w przykładowej bazie danych Northwind.

  • Uzupełnienie adnotacji do Customer klasy w celu zwiększenia relacji między klasami Customer i Order .

  • Tworzenie i uruchamianie zapytania w celu przetestowania procesu uzyskiwania Order informacji przy użyciu Customer klasy .

Mapowanie relacji między tabelami

Customer Po definicji klasy utwórz definicję Order klasy jednostki, która zawiera następujący kod, który wskazuje, że Orders.Customer odnosi się jako klucz obcy do Customers.CustomerID.

Aby dodać klasę jednostki Order

  • Wpisz lub wklej następujący kod po Customer klasie:

    <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
    

Dodawanie adnotacji do klasy klienta

W tym kroku dodasz adnotację Customer do klasy, aby wskazać jej relację z klasą Order . (Ten dodatek nie jest ściśle konieczny, ponieważ zdefiniowanie relacji w obu kierunkach jest wystarczające do utworzenia łącza. Jednak dodanie tej adnotacji umożliwia łatwe nawigowanie po obiektach w obu kierunkach).

Aby dodać adnotację do klasy Customer

  • Wpisz lub wklej następujący kod do Customer klasy:

    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
    

Tworzenie i uruchamianie zapytania w relacji zamówienie klienta

Teraz można uzyskiwać dostęp do Order obiektów bezpośrednio z Customer obiektów lub w odwrotnej kolejności. Nie potrzebujesz jawnego sprzężenia między klientami i zamówieniami.

Aby uzyskać dostęp do obiektów Order przy użyciu obiektów klienta

  1. Zmodyfikuj metodę Sub Main , wpisując lub wklejając następujący kod w metodzie :

    ' 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. Naciśnij klawisz F5, aby debugować aplikację.

    W oknie komunikatu są wyświetlane dwie nazwy, a w oknie Konsola zostanie wyświetlony wygenerowany kod SQL.

  3. Zamknij okno komunikatu, aby zatrzymać debugowanie.

Tworzenie silnie typizowanego widoku bazy danych

Znacznie łatwiej jest rozpocząć od silnie typizowanego widoku bazy danych. W przypadku silnego DataContext wpisywania obiektu nie trzeba wywołać metody GetTable. W przypadku używania silnie typizowanego obiektu można użyć silnie typiowanych DataContext tabel we wszystkich zapytaniach.

W poniższych krokach utworzysz Customers silnie typizowana tabelę, która jest mapowana na tabelę Customers w bazie danych.

Aby silnie wpisać obiekt DataContext

  1. Dodaj następujący kod powyżej deklaracji Customer klasy.

    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. Zmodyfikuj Sub Main , aby używać silnie typizowanego DataContext elementu w następujący sposób:

    ' 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. Naciśnij klawisz F5, aby debugować aplikację.

    Dane wyjściowe okna konsoli to:

    ID=WHITC

  4. Naciśnij klawisz Enter w oknie Konsola, aby zamknąć aplikację.

  5. W menu Plik kliknij pozycję Zapisz wszystko, jeśli chcesz zapisać tę aplikację.

Następne kroki

W następnym przewodniku (Przewodnik: manipulowanie danymi (Visual Basic)) pokazano, jak manipulować danymi. Ten przewodnik nie wymaga zapisania dwóch przewodników w tej serii, które zostały już ukończone.

Zobacz też