Sdílet prostřednictvím


Návod: Dotazování napříč relacemi (Visual Basic)

Tento názorný postup ukazuje použití přidružení LINQ to SQL k reprezentaci relací cizích klíčů v databázi.

Poznámka:

Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí.

Tento návod byl napsán pomocí vývojového Nastavení jazyka Visual Basic.

Požadavky

Musíte mít dokončený návod: Jednoduchý objektový model a dotaz (Visual Basic). Tento názorný postup vychází z tohoto souboru, včetně přítomnosti souboru northwnd.mdf v souboru c:\linqtest.

Přehled

Tento názorný postup se skládá ze tří hlavních úloh:

  • Přidání třídy entity představující tabulku Orders v ukázkové databázi Northwind

  • Doplnění poznámek ke Customer třídě, aby se zlepšil vztah mezi třídami Customer a Order třídami.

  • Vytvoření a spuštění dotazu k otestování procesu získávání Order informací pomocí Customer třídy.

Mapování relací mezi tabulkami

Customer Po definici třídy vytvořte Order definici třídy entity, která obsahuje následující kód, který označuje, že Orders.Customer se vztahuje jako cizí klíč k Customers.CustomerID.

Přidání třídy entity Order

  • Za třídu zadejte nebo vložte následující kód Customer :

    <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
    

Anotace třídy Customer

V tomto kroku označíte Customer třídu poznámkami, abyste označili její vztah ke Order třídě. (Tento doplněk není nezbytně nutný, protože definování relace v obou směrech stačí k vytvoření propojení. Přidáním této poznámky ale můžete snadno procházet objekty v obou směrech.)

Anotace třídy Customer

  • Do třídy zadejte nebo vložte následující kód 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
    

Vytvoření a spuštění dotazu napříč relací objednávky zákazníka

Nyní můžete přistupovat k Order objektům přímo z Customer objektů nebo v opačném pořadí. Nepotřebujete explicitní spojení mezi zákazníky a objednávkami.

Přístup k objektům Objednávky pomocí objektů Zákazník

  1. Upravte metodu Sub Main zadáním nebo vložením následujícího kódu do metody:

    ' 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. Stisknutím klávesy F5 můžete ladit aplikaci.

    V okně se zprávou se zobrazí dva názvy a v okně Konzola se zobrazí vygenerovaný kód SQL.

  3. Zavřete okno se zprávou a zastavte ladění.

Vytvoření zobrazení databáze se silnými typy

Mnohem jednodušší je začít se zobrazením databáze silného typu. Silným zadáním objektu DataContext nepotřebujete volání GetTable. Tabulky silného typu můžete použít ve všech dotazech, když použijete objekt silného typu DataContext .

V následujících krocích vytvoříte Customers tabulku silného typu, která se mapuje na tabulku Zákazníci v databázi.

Pro silné zadání objektu DataContext

  1. Nad deklaraci třídy přidejte následující kód Customer .

    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. Upravte Sub Main použití silného typu DataContext následujícím způsobem:

    ' 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. Stisknutím klávesy F5 můžete ladit aplikaci.

    Výstup okna konzoly je:

    ID=WHITC

  4. Stisknutím klávesy Enter v okně konzoly aplikaci zavřete.

  5. V nabídce Soubor klepněte na tlačítko Uložit vše, pokud chcete uložit tuto aplikaci.

Další kroky

Další návod (Návod: Manipulace s daty (Visual Basic)) ukazuje, jak manipulovat s daty. Tento názorný postup nevyžaduje uložení dvou návodů v této řadě, které jste už dokončili.

Viz také