Bagikan melalui


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 kelas Customer dan Order.

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

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

  1. 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);
    }
    
  2. Tekan F5 untuk men-debug aplikasi Anda.

    Catatan

    Anda dapat menghilangkan kode SQL di jendela Konsol dengan mengomentari db.Log = Console.Out;.

  3. 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

  1. 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) { }
    }
    
  2. 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();
    
  3. Tekan F5 untuk men-debug aplikasi Anda.

    Output jendela Konsolnya adalah:

    ID=WHITC

  4. 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.

Lihat juga