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řídamiCustomer
aOrder
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
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)
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.
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
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
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()
Stisknutím klávesy F5 můžete ladit aplikaci.
Výstup okna konzoly je:
ID=WHITC
Stisknutím klávesy Enter v okně konzoly aplikaci zavřete.
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.