Przewodnik: Wykonywanie zapytań w relacjach (Visual Basic)
W tym przewodniku przedstawiono użycie skojarzeń LINQ to SQL do reprezentowania relacji klucza obcego w bazie danych.
Uwaga
Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.
Ten przewodnik został napisany przy użyciu programu Visual Basic Development Ustawienia.
Wymagania wstępne
Musisz ukończyć przewodnik: prosty model obiektów i zapytanie (Visual Basic). Ten przewodnik opiera się na tym, w tym obecności pliku northwnd.mdf w c:\linqtest.
Omówienie
Ten przewodnik składa się z trzech głównych zadań:
Dodanie klasy jednostki do reprezentowania tabeli Orders (Zamówienia) w przykładowej bazie danych Northwind.
Uzupełnienie adnotacji do
Customer
klasy w celu zwiększenia relacji między klasamiCustomer
iOrder
.Tworzenie i uruchamianie zapytania w celu przetestowania procesu uzyskiwania
Order
informacji przy użyciuCustomer
klasy .
Mapowanie relacji między tabelami
Customer
Po definicji klasy utwórz definicję Order
klasy jednostki, która zawiera następujący kod, który wskazuje, że Orders.Customer
odnosi się jako klucz obcy do Customers.CustomerID
.
Aby dodać klasę jednostki Order
Wpisz lub wklej następujący kod po
Customer
klasie:<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
Dodawanie adnotacji do klasy klienta
W tym kroku dodasz adnotację Customer
do klasy, aby wskazać jej relację z klasą Order
. (Ten dodatek nie jest ściśle konieczny, ponieważ zdefiniowanie relacji w obu kierunkach jest wystarczające do utworzenia łącza. Jednak dodanie tej adnotacji umożliwia łatwe nawigowanie po obiektach w obu kierunkach).
Aby dodać adnotację do klasy Customer
Wpisz lub wklej następujący kod do
Customer
klasy: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
Tworzenie i uruchamianie zapytania w relacji zamówienie klienta
Teraz można uzyskiwać dostęp do Order
obiektów bezpośrednio z Customer
obiektów lub w odwrotnej kolejności. Nie potrzebujesz jawnego sprzężenia między klientami i zamówieniami.
Aby uzyskać dostęp do obiektów Order przy użyciu obiektów klienta
Zmodyfikuj metodę
Sub Main
, wpisując lub wklejając następujący kod w metodzie :' 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)
Naciśnij klawisz F5, aby debugować aplikację.
W oknie komunikatu są wyświetlane dwie nazwy, a w oknie Konsola zostanie wyświetlony wygenerowany kod SQL.
Zamknij okno komunikatu, aby zatrzymać debugowanie.
Tworzenie silnie typizowanego widoku bazy danych
Znacznie łatwiej jest rozpocząć od silnie typizowanego widoku bazy danych. W przypadku silnego DataContext wpisywania obiektu nie trzeba wywołać metody GetTable. W przypadku używania silnie typizowanego obiektu można użyć silnie typiowanych DataContext tabel we wszystkich zapytaniach.
W poniższych krokach utworzysz Customers
silnie typizowana tabelę, która jest mapowana na tabelę Customers w bazie danych.
Aby silnie wpisać obiekt DataContext
Dodaj następujący kod powyżej deklaracji
Customer
klasy.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
Zmodyfikuj
Sub Main
, aby używać silnie typizowanego DataContext elementu w następujący sposób:' 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()
Naciśnij klawisz F5, aby debugować aplikację.
Dane wyjściowe okna konsoli to:
ID=WHITC
Naciśnij klawisz Enter w oknie Konsola, aby zamknąć aplikację.
W menu Plik kliknij pozycję Zapisz wszystko, jeśli chcesz zapisać tę aplikację.
Następne kroki
W następnym przewodniku (Przewodnik: manipulowanie danymi (Visual Basic)) pokazano, jak manipulować danymi. Ten przewodnik nie wymaga zapisania dwóch przewodników w tej serii, które zostały już ukończone.