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 kelasCustomer
danOrder
.Membuat dan menjalankan kueri untuk menguji proses mendapatkan informasi
Order
dengan menggunakan kelasCustomer
.
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
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)
Tekan F5 untuk men-debug aplikasi Anda.
Dua nama muncul di kotak pesan dan jendela Konsol menampilkan kode SQL yang dihasilkan.
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
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
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()
Tekan F5 untuk men-debug aplikasi Anda.
Output jendela Konsolnya adalah:
ID=WHITC
Tekan Enter di jendela Konsol untuk menutup aplikasi.
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.