Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sınıf tanımlarınızdaki diğer nesnelere veya diğer nesne koleksiyonlarına başvurular, veritabanındaki yabancı anahtar ilişkilerine doğrudan karşılık gelir. İlişki özelliklerine erişmek ve bir nesneden diğerine gitmek için noktalı gösterimi kullanarak sorgularken bu ilişkileri kullanabilirsiniz. Bu erişim işlemleri, eşdeğer SQL'de daha karmaşık birleşimlere veya bağıntılı alt sorgulara çevrilir.
Örneğin, aşağıdaki sorgu siparişlerden müşterilere geçerek sonuçları Londra'da bulunan müşterilere ait siparişlerle sınırlamaktadır.
Northwnd db = new Northwnd(@"northwnd.mdf");
IQueryable<Order> londonOrderQuery =
from ord in db.Orders
where ord.Customer.City == "London"
select ord;
Dim db As New Northwnd("c:\northwnd.mdf")
Dim londonOrderQuery = _
From ord In db.Orders _
Where ord.Customer.City = "London" _
Select ord
İlişki özellikleri yoksa, aşağıdaki kodda olduğu gibi sql sorgusunda yaptığınız gibi bunları el ile birleşim olarak yazmanız gerekirdi:
Northwnd db = new Northwnd(@"northwnd.mdf");
IQueryable<Order> londonOrderQuery =
from cust in db.Customers
join ord in db.Orders on cust.CustomerID equals ord.CustomerID
where cust.City == "London"
select ord;
Dim db As New Northwnd("c:\northwnd.mdf")
Dim londOrderQuery = _
From cust In db.Customers _
Join ord In db.Orders On cust.CustomerID Equals ord.CustomerID _
Select ord
Bu ilişkiyi bir kez tanımlamak için ilişki özelliğini kullanabilirsiniz. Daha sonra daha kullanışlı nokta söz dizimini kullanabilirsiniz. Ancak etki alanına özgü nesne modelleri genellikle hiyerarşiler veya grafikler olarak tanımlandığından ilişki özellikleri daha da önemlidir. Üzerinde programladığınız nesnelerin diğer nesnelere başvuruları vardır. Nesneden nesneye ilişkilerin veritabanlarındaki yabancı anahtar stilindeki ilişkilere karşılık gelmeleri yalnızca mutlu bir tesadüftür. Özellik erişimi daha sonra birleşimleri yazmak için kullanışlı bir yol sağlar.
Bununla ilgili olarak, ilişki özellikleri sorgunun sonuç tarafında sorgunun kendisinden daha önemlidir. Sorgu belirli bir müşteriyle ilgili verileri aldıktan sonra, sınıf tanımı müşterilerin siparişleri olduğunu gösterir. Başka bir deyişle, belirli bir müşterinin Orders özelliğinin, söz konusu müşteriden gelen tüm siparişlerle doldurulmuş bir koleksiyon olmasını beklersiniz. Bu aslında sınıfları bu şekilde tanımlayarak bildirdiğiniz sözleşmedir. Sorgu sipariş istemese bile siparişleri orada görmeyi beklersiniz. Nesne modelinizin veritabanının bellek içi bir uzantısı olduğu yanılsamasını ve ilgili nesneleri hemen kullanılabilir durumda tutmasını beklersiniz.
Artık ilişkileriniz olduğuna göre, sınıflarınızda tanımlanan ilişki özelliklerine başvurarak sorgular yazabilirsiniz. Bu ilişki referansları, veritabanındaki yabancı anahtar ilişkilerine karşılık gelmektedir. Bu ilişkileri kullanan işlemler, eşdeğer SQL'de daha karmaşık birleşimlere çevrilir. AssociationAttribute özniteliğini kullanarak bir ilişki tanımladığınız sürece, LINQ to SQL'de açık bir birleştirme kodlamanıza gerek yoktur.
LINQ to SQL, bu yanılgıyı korumaya yardımcı olmak için ertelenen yükleme adlı bir teknik uygular. Daha fazla bilgi için bkz. Ertelenmiş ve Anında Yükleme.
Çiftlerin listesini yansıtmak için aşağıdaki SQL sorgusunu CustomerID-OrderID göz önünde bulundurun:
SELECT t0.CustomerID, t1.OrderID
FROM Customers AS t0 INNER JOIN
Orders AS t1 ON t0.CustomerID = t1.CustomerID
WHERE (t0.City = @p0)
LINQ to SQL kullanarak aynı sonuçları elde etmek için sınıfında zaten var olan özellik başvuruyu Orders kullanırsınızCustomer. Referans, sorguyu yürütmek ve OrdersCustomerID- çiftlerini projekte etmek için gerekli bilgileri sağlar, aşağıdaki kodda olduğu gibi:
Northwnd db = new Northwnd(@"northwnd.mdf");
var idQuery =
from cust in db.Customers
from ord in cust.Orders
where cust.City == "London"
select new { cust.CustomerID, ord.OrderID };
Dim db As New Northwnd("c:\northwnd.mdf")
Dim idQuery = _
From cust In db.Customers, ord In cust.Orders _
Where cust.City = "London" _
Select cust.CustomerID, ord.OrderID
Bunun tersini de yapabilirsiniz. Başka bir ifadeyle, Orders sorgulayabilir ve ilişkili Customer nesne hakkındaki bilgilere erişmek için Customer ilişki başvurusunu kullanabilirsiniz. Aşağıdaki kod, öncekiyle aynı CustomerID-OrderID çiftlerini oluşturur, ancak bu kez Orders yerine Customers sorgulayıp bu şekilde projelendirir.
Northwnd db = new Northwnd(@"northwnd.mdf");
var idQuery =
from ord in db.Orders
where ord.Customer.City == "London"
select new { ord.Customer.CustomerID, ord.OrderID };
Dim db As New Northwnd("c:\northwnd.mdf")
Dim idQuery = _
From ord In db.Orders _
Where ord.Customer.City = "London" _
Select ord.CustomerID, ord.OrderID