Panduan: Membuat Kueri Lintas Hubungan (C#)
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 dengan menggunakan Pengaturan Pengembangan Visual C#.
Prasyarat
Anda harus sudah menyelesaikan Panduan: Model Objek dan Kueri Sederhana(C#). Panduan ini dibuat berdasarkan hal tersebut, termasuk keberadaan file northwnd.mdf di c:\linqtest5.
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 perolehan informasi
Order
dengan menggunakan kelasCustomer
.
Memetakan Hubungan Antar Tabel
Setelah definisi kelas Customer
, buat definisi kelas entitas Order
yang menyertakan kode berikut, yang menunjukkan bahwa Order.Customer
berkaitan sebagai kunci asing ke Customer.CustomerID
.
Untuk menambahkan kelas entitas Pesanan
Ketik atau tempel kode berikut setelah kelas
Customer
:[Table(Name = "Orders")] public class Order { private int _OrderID = 0; private string _CustomerID; private EntityRef<Customer> _Customer; public Order() { this._Customer = new EntityRef<Customer>(); } [Column(Storage = "_OrderID", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int OrderID { get { return this._OrderID; } // No need to specify a setter because IsDBGenerated is // true. } [Column(Storage = "_CustomerID", DbType = "NChar(5)")] public string CustomerID { get { return this._CustomerID; } set { this._CustomerID = value; } } [Association(Storage = "_Customer", ThisKey = "CustomerID")] public Customer Customer { get { return this._Customer.Entity; } set { this._Customer.Entity = value; } } }
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 EntitySet<Order> _Orders; public Customer() { this._Orders = new EntitySet<Order>(); } [Association(Storage = "_Orders", OtherKey = "CustomerID")] public EntitySet<Order> Orders { get { return this._Orders; } set { this._Orders.Assign(value); } }
Membuat dan Menjalankan Kueri di Seluruh Hubungan Pesanan Pelanggan
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
Main
dengan mengetikkan atau menempelkan kode berikut ke dalam metode:// Query for customers who have placed orders. var custQuery = from cust in Customers where cust.Orders.Any() select cust; foreach (var custObj in custQuery) { Console.WriteLine("ID={0}, Qty={1}", custObj.CustomerID, custObj.Orders.Count); }
Tekan F5 untuk men-debug aplikasi Anda.
Catatan
Anda dapat menghilangkan kode SQL di jendela Konsol dengan mengomentari
db.Log = Console.Out;
.Tekan Enter di jendela Konsol untuk menghentikan proses debug.
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 : DataContext { // Table<T> abstracts database details per table/data type. public Table<Customer> Customers; public Table<Order> Orders; public Northwind(string connection) : base(connection) { } }
Ubah metode
Main
untuk menggunakan DataContext bertipe kuat sebagai berikut:// Use a connection string. Northwind db = new Northwind(@"C:\linqtest5\northwnd.mdf"); // Query for customers from Seattle. var custQuery = from cust in db.Customers where cust.City == "Seattle" select cust; foreach (var custObj in custQuery) { Console.WriteLine("ID={0}", custObj.CustomerID); } // 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 menghentikan proses debug.
Langkah berikutnya
Panduan berikutnya (Panduan: Memanipulasi Data (C#)) menunjukkan cara memanipulasi data. Panduan tersebut tidak mengharuskan Anda menyimpan dua panduan dalam seri ini yang telah Anda selesaikan.