Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этом пошаговом руководстве показано использование связей LINQ to SQL для представления связей внешнего ключа в базе данных.
Замечание
На компьютере могут отображаться различные имена или расположения для некоторых элементов пользовательского интерфейса Visual Studio в следующих инструкциях. Выпуск Visual Studio, который у вас есть, и параметры, которые вы используете, определяют эти элементы. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки.
Это пошаговое руководство было написано с помощью параметров разработки 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 класс, чтобы указать его связь с классом 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Нажмите клавишу ВВОД в окне консоли, чтобы закрыть приложение.
В меню "Файл" нажмите кнопку "Сохранить все ", если вы хотите сохранить это приложение.
Дальнейшие шаги
В следующем пошаговом руководстве (пошаговое руководство. Управление данными (Visual Basic)) показано, как управлять данными. В этом пошаговом руководстве не требуется сохранять два пошаговых руководства из этой серии, которые вы уже выполнили.