Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat Anda meminta sebuah objek, Anda sebenarnya hanya mengambil objek yang diminta. Objek terkait tidak diambil secara otomatis secara bersamaan. (Untuk informasi selengkapnya, lihat Melakukan Query Antara Hubungan.) Anda tidak dapat melihat bahwa objek terkait belum dimuat, karena upaya untuk mengaksesnya akan menimbulkan permintaan untuk mengambilnya.
Misalnya, Anda mungkin ingin mengkueri sekumpulan pesanan tertentu lalu hanya sesekali mengirim pemberitahuan email ke pelanggan tertentu. Pada awalnya, Anda tidak perlu selalu mengumpulkan semua data pelanggan dengan setiap pesanan. Anda dapat menggunakan pemuatan yang ditangguhkan untuk menunda pengambilan informasi tambahan sampai Anda benar-benar harus melakukannya. Pertimbangkan contoh berikut:
Northwnd db = new Northwnd(@"northwnd.mdf");
IQueryable<Order> notificationQuery =
from ord in db.Orders
where ord.ShipVia == 3
select ord;
foreach (Order ordObj in notificationQuery)
{
if (ordObj.Freight > 200)
SendCustomerNotification(ordObj.Customer);
ProcessOrder(ordObj);
}
}
Dim db As New Northwnd("c:\northwnd.mdf")
Dim notificationQuery = _
From ord In db.Orders _
Where ord.ShipVia = 3 _
Select ord
For Each ordObj As Order In notificationQuery
If ordObj.Freight > 200 Then
SendCustomerNotification(ordObj.Customer)
ProcessOrder(ordObj)
End If
Next
Sebaliknya mungkin juga benar. Anda mungkin memiliki aplikasi yang harus melihat data pelanggan dan pesanan secara bersamaan. Anda tahu bahwa Anda memerlukan kedua set data. Anda tahu aplikasi Anda membutuhkan informasi pesanan untuk setiap pelanggan segera setelah Anda mendapatkan hasilnya. Anda tidak ingin mengirimkan kueri individual untuk pesanan dari setiap pelanggan. Yang benar-benar Anda inginkan adalah mengambil data pesanan bersama dengan pelanggan.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
db.DeferredLoadingEnabled = false;
IQueryable<Customer> custQuery =
from cust in db.Customers
where cust.City == "London"
select cust;
foreach (Customer custObj in custQuery)
{
foreach (Order ordObj in custObj.Orders)
{
ProcessCustomerOrder(ordObj);
}
}
Dim db As New Northwnd("c:\northwnd.mdf")
db.DeferredLoadingEnabled = False
Dim custQuery = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust
For Each custObj As Customer In custQuery
For Each ordObj As Order In custObj.Orders
ProcessCustomerOrder(ordObj)
Next
Next
Anda juga dapat menggabungkan pelanggan dan pesanan dalam kueri dengan membentuk lintas produk dan mengambil semua bit data relatif sebagai satu proyeksi besar. Tetapi hasil ini bukan entitas. (Untuk informasi selengkapnya, lihat LINQ ke SQL Object Model). Entitas adalah objek yang memiliki identitas dan dapat Anda ubah, sedangkan hasil ini akan menjadi proyeksi yang tidak dapat diubah dan dipertahankan. Lebih buruk lagi, Anda akan mengambil banyak data redundan saat setiap pelanggan mengulangi untuk setiap pesanan dalam output gabungan yang diratakan.
Apa yang benar-benar Anda butuhkan adalah cara untuk mengambil sekumpulan objek terkait secara bersamaan. Set adalah bagian terdefinisi dari grafik sehingga Anda tidak akan pernah mengambil data lebih atau kurang dari yang diperlukan untuk penggunaan Anda. Untuk tujuan ini, LINQ ke SQL menyediakan DataLoadOptions untuk memuat langsung bagian wilayah dari model objek Anda. Metode meliputi:
Metode LoadWith untuk segera memuat data yang terkait dengan target utama.
Metode AssociateWith untuk memfilter objek yang diambil untuk hubungan tertentu.