Aracılığıyla paylaş


Rehber: İlişkiler Arasında Sorgulama (Visual Basic)

Bu izlenecek yol, veritabanındaki yabancı anahtar ilişkilerini temsil etmek için LINQ to SQL ilişkilendirmelerinin kullanımını gösterir.

Uyarı

Bilgisayarınız, aşağıdaki yönergelerde bazı Visual Studio kullanıcı arabirimi öğeleri için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için bkz. IDE'yi Kişiselleştirme.

Bu kılavuz, Visual Basic Geliştirme Ayarları kullanılarak yazılmıştır.

Önkoşullar

İzlenecek Yol: Basit Nesne Modeli ve Sorgu (Visual Basic) bölümünü tamamlamış olmanız gerekir. Bu izlenecek yol, önceki izlenecek yol üzerine derlenmiştir ve c:\linqtest'teki northwnd.mdf dosyasının varlığını içermektedir.

Genel Bakış

Bu izlenecek yol üç ana görevden oluşur:

  • Örnek Northwind veritabanında Orders tablosunu temsil eden bir varlık sınıfı ekleme.

  • İlişkiyi geliştirmek amacıyla Customer sınıfına, Customer ve Order sınıfları arasındaki ek açıklamalar ekleme.

  • Order sınıfını kullanarak bilgi alma işlemine ilişkin süreci test etmek için sorgu oluşturma ve çalıştırma.

Tablolar Arasında İlişkileri Eşleme

Sınıf tanımı Customer oluşturulduktan sonra, Order varlık sınıfı tanımını oluşturun ve bu tanımda Orders.Customer'nin, Customers.CustomerID ile yabancı anahtar olarak ilişkili olduğunu gösteren aşağıdaki kodu ekleyin.

Order varlık sınıfını eklemek için

  • Customer sınıfının ardından aşağıdaki kodu yazın veya yapıştırın.

    <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
    

Müşteri Sınıfına Açıklama Ekleme

Bu adımda, Customer sınıfına Order sınıfıyla olan ilişkisini göstermek için etiketleme yaparsınız. (İlişkiyi her iki yönde tanımlamak bağlantıyı oluşturmak için yeterli olduğundan bu ekleme kesinlikle gerekli değildir. Ancak bu ek açıklamayı eklemek, nesnelerde her iki yönde de kolayca gezinmenizi sağlar.)

Customer sınıfına açıklama eklemek için

  • Sınıfına aşağıdaki kodu yazın veya yapıştırın 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
    

Customer-Order İlişkisinde Sorgu Oluşturma ve Çalıştırma

Artık Order nesnelere doğrudan Customer nesnelerden veya ters sırada erişebilirsiniz. Müşteriler ve siparişler arasında açık bir birleşime ihtiyacınız yoktur.

Order nesnelerine erişmek için Müşteri nesnelerini kullanmak

  1. yöntemine Sub Main aşağıdaki kodu yazarak veya yapıştırarak yöntemini değiştirin:

    ' 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)
    
  2. Uygulamanızda hata ayıklamak için F5 tuşuna basın.

    İleti kutusunda iki ad, Konsol penceresinde ise oluşturulan SQL kodu gösterilir.

  3. Hata ayıklamayı durdurmak için ileti kutusunu kapatın.

Veritabanınızın Güçlü Tipte Bir Görünümünü Oluşturma

Veritabanınızın kesin olarak belirlenmiş bir görünümüyle başlamak çok daha kolaydır. Nesneyi güçlü bir şekilde DataContext yazarak GetTable çağrı yapmanıza gerek kalmaz. Kesin tip tanımlı DataContext nesneyi kullandığınızda, tüm sorgularınızda kesin tip tanımlı tabloları kullanabilirsiniz.

Aşağıdaki adımlarda, veritabanındaki Müşteriler tablosuyla eşleşen, belirli bir türe sahip bir tablo olarak Customers oluşturacaksınız.

DataContext nesnesini kesin olarak yazmak için

  1. Sınıf bildiriminin Customer üzerine aşağıdaki kodu ekleyin.

    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
    
  2. Sub Main'ı, aşağıdaki gibi güçlü yazılmış DataContext kullanacak şekilde değiştirin.

    ' 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()
    
  3. Uygulamanızda hata ayıklamak için F5 tuşuna basın.

    Konsol penceresi çıkışı şöyledir:

    ID=WHITC

  4. Uygulamayı kapatmak için Konsol penceresinde Enter tuşuna basın.

  5. Bu uygulamayı kaydetmek istiyorsanız Dosya menüsünde Tümünü Kaydet'e tıklayın.

Sonraki Adımlar

Sonraki izlenecek yol (İzlenecek Yol: Verileri Düzenleme (Visual Basic)) verileri işlemeyi gösterir. Bu izlenecek yol, daha önce tamamlamış olduğunuz bu serideki iki kılavuzu kaydetmenizi gerektirmez.

Ayrıca bakınız