Пошаговое руководство. Запросы по связям (Visual Basic)
В этом пошаговом руководстве показано использование связей LINQ to SQL для представления связей внешнего ключа в базе данных.
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Это пошаговое руководство было написано с помощью параметров разработки Visual Basic.
Необходимые компоненты
Необходимо выполнить пошаговое руководство. Простая объектная модель и запрос (Visual Basic). На этом пошаговом руководстве основано руководство, описываемое в данном разделе. В частности на компьютере должен иметься файл northwnd.mdf в папке c:\linqtest.
Обзор
Данное пошаговое руководство состоит из трех основных задач.
Добавление класса сущности, который представляет таблицу "Orders" в базе данных "Northwind".
Добавление примечаний к классу
Customer
, чтобы расширить связи между классамиCustomer
иOrder
.Создание и выполнение запроса для тестирования процесса получения сведений класса
Order
с помощью классаCustomer
.
Сопоставление связей между таблицами
После определения класса Customer
создайте определение класса сущностей Order
, включающее следующий код, который указывает, что свойство Orders.Customer
связано как внешний ключ со свойством Customers.CustomerID
.
Добавление класса сущностей "Order"
Введите или вставьте следующий код после определения класса
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
Добавление примечаний к классу "Customer"
На этом этапе добавляются примечания к классу Customer
, чтобы указать его связь с классом Order
. (Это дополнение не является строго обязательным, так как определение связи в любом направлении достаточно для создания ссылки. Но добавление этой заметки позволяет легко перемещать объекты в любом направлении.)
Добавление примечаний к классу "Customer"
Введите или вставьте следующий код в класс
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"
Теперь можно получить доступ к объектам Order
непосредственно из объектов Customer
или в обратном направлении. Вам не требуется явное соединение между клиентами и заказами.
Получение доступа к объектам "Order" с помощью объектов "Customer"
Измените метод
Sub Main
посредством ввода или вставки в метод следующего кода:' 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)
Нажмите клавишу F5, чтобы начать отладку приложения.
В окне сообщения отобразятся два имени, и в окне "Консоль" появится созданный код SQL.
Закройте окно сообщения, чтобы остановить отладку.
Создание строго типизированного представления базы данных
Общая процедура становится гораздо проще, если в начале использовать строго типизированное представление базы данных. Задавая строгую типизацию объекта DataContext, можно избежать вызовов метода GetTable. Строго типизированные таблицы можно использовать в запросах только при использовании строго типизированного объекта DataContext.
В представленных ниже шагах создается объект Customers
в качестве строго типизированной таблицы, которая сопоставляется с таблицей "Customers" в базе данных.
Установка строгой типизации объекта "DataContext"
Добавьте следующий код непосредственно перед объявлением класса
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
Измените метод
Sub Main
, чтобы использовать строго типизированный объект DataContext, как показано ниже:' 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()
Нажмите клавишу F5, чтобы начать отладку приложения.
В окне «Консоль"» отобразится следующее.
ID=WHITC
Чтобы закрыть приложение, в окне "Консоль" нажмите клавишу ВВОД.
В меню "Файл" нажмите кнопку "Сохранить все", если вы хотите сохранить это приложение.
Next Steps
В следующем пошаговом руководстве (пошаговое руководство. Управление данными (Visual Basic)) показано, как управлять данными. Для этого пошагового руководства не требуется сохранять два пошаговых руководства, которые уже выполнены в этой серии.