Bagikan melalui


Panduan: Melakukan Kueri di Lintas Hubungan (Visual Basic)

Panduan ini menunjukkan penggunaan asosiasi LINQ to SQL untuk mewakili hubungan kunci asing dalam database.

Catatan

Komputer Anda mungkin memperlihatkan nama atau lokasi yang berbeda untuk beberapa elemen antarmuka pengguna Visual Studio dalam petunjuk berikut. Edisi Visual Studio yang Anda miliki dan setelan yang Anda gunakan menentukan elemen-elemen ini. Untuk informasi selengkapnya, lihat Mempersonalisasi IDE.

Panduan ini ditulis menggunakan Pengaturan Pengembangan Visual Basic.

Prasyarat

Anda harus telah menyelesaikan Panduan: Model Objek Sederhana dan Kueri (Visual Basic). Panduan ini dibangun berdasarkan hal di atas, termasuk keberadaan file northwnd.mdf di c:\linqtest.

Gambaran Umum

Panduan ini terdiri dari tiga tugas utama:

  • Menambahkan kelas entitas untuk mewakili tabel Pesanan dalam sampel database Northwind.

  • Melengkapi anotasi ke kelas Customer untuk meningkatkan hubungan antara kelas Customer dan Order.

  • Membuat dan menjalankan kueri untuk menguji proses mendapatkan informasi Order dengan menggunakan kelas Customer.

Memetakan Hubungan di seluruh Tabel

Setelah definisi kelas Customer, buat definisi kelas entitas Order yang menyertakan kode berikut, yang menunjukkan bahwa Orders.Customer berkaitan sebagai kunci asing ke Customers.CustomerID.

Untuk menambahkan kelas entitas Pesanan

  • Ketik atau tempel kode berikut setelah kelas 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
    

Menganotasi Kelas Pelanggan

Pada langkah ini, Anda memberi anotasi pada kelas Customer untuk menunjukkan hubungannya dengan kelas Order. (Penambahan ini tidak sepenuhnya diperlukan, karena mendefinisikan hubungan di kedua arah sudah cukup untuk membuat tautan. Tetapi menambahkan anotasi ini memungkinkan Anda dengan mudah menavigasi objek di kedua arah.)

Untuk membuat anotasi kelas Pelanggan

  • Ketik atau tempel kode berikut ke dalam kelas 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
    

Membuat dan Menjalankan Kueri di seluruh Hubungan Pelanggan-Pemesanan

Anda sekarang dapat mengakses objek Order langsung dari objek Customer, atau dalam urutan yang berlawanan. Anda tidak memerlukan gabungan eksplisit antara pelanggan dan pesanan.

Untuk mengakses objek Pesanan dengan menggunakan objek Pelanggan

  1. Ubah metode Sub Main dengan mengetikkan atau menempelkan kode berikut ke dalam metode:

    ' 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. Tekan F5 untuk men-debug aplikasi Anda.

    Dua nama muncul di kotak pesan dan jendela Konsol menampilkan kode SQL yang dihasilkan.

  3. Tutup kotak pesan untuk menghentikan penelusuran kesalahan.

Membuat Tampilan Database Bertipe Kuat

Menggunakan tampilan database bertipe kuat sangat memudahkan proses memulai. Dengan membuat objek DataContext bertipe kuat, Anda tidak perlu melakukan panggilan ke GetTable. Anda dapat menggunakan tabel bertipe kuat di semua kueri saat menggunakan objek DataContext bertipe kuat.

Pada langkah-langkah berikut, Anda akan membuat Customers sebagai tabel bertipe kuat yang memetakan ke tabel Pelanggan di database.

Untuk memasukkan objek DataContext ke bertipe kuat

  1. Tambahkan kode berikut di atas deklarasi kelas 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
    
  2. Ubah Sub Main untuk menggunakan DataContext bertipe kuat sebagai berikut:

    ' 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. Tekan F5 untuk men-debug aplikasi Anda.

    Output jendela Konsolnya adalah:

    ID=WHITC

  4. Tekan Enter di jendela Konsol untuk menutup aplikasi.

  5. Pada menu File, klik Simpan Semua jika Anda ingin menyimpan aplikasi ini.

Langkah berikutnya

Panduan berikutnya (Panduan: Memanipulasi Data (Visual Basic)) menunjukkan cara memanipulasi data. Panduan tersebut tidak mengharuskan Anda menyimpan dua panduan dalam seri ini yang telah Anda selesaikan.

Lihat juga