Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento názorný postup ukazuje použití přidružení LINQ to SQL k reprezentaci relací cizích klíčů v databázi.
Poznámka:
Počítač může v následujících pokynech zobrazit různé názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Edice sady Visual Studio, kterou máte, a nastavení, která používáte, určují tyto prvky. Další informace najdete v tématu Přizpůsobeníintegrovaného vývojového prostředí (IDE).
Tento návod byl napsán pomocí nastavení vývoje jazyka Visual Basic.
Požadavky
Musíte mít dokončený návod: Jednoduchý objektový model a dotaz (Visual Basic). Tento průvodce navazuje na ten předchozí, včetně přítomnosti souboru northwnd.mdf ve složce 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 do třídy
Customer, aby se zlepšil vztah mezi třídamiCustomeraOrder.Vytvoření a spuštění dotazu k otestování procesu získávání
Orderinformací pomocíCustomertřídy.
Mapování relací mezi tabulkami
Po definici třídy Customer vytvořte definici třídy entity Order, která obsahuje následující kód, který označuje, že Orders.Customer souvisí jako cizí klíč k Customers.CustomerID.
Přidání třídy entity Order
Za třídu
Customerzadejte nebo vložte následující kód:<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 Zákazník
V tomto kroku označíte třídu Customer poznámkami a označíte její vztah k 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 Zákazník
Do třídy
Customerzadejte nebo vložte následující kód: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í Customer-Order
Nyní můžete přistupovat k objektům Order přímo z objektů Customer nebo v opačném pořadí. Nepotřebujete explicitní připojit mezi zákazníky a objednávkami.
Jak získat přístup k objektu Objednávky pomocí objektu Zákazníka
Upravte metodu
Sub Mainzadá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í striktně typovaného zobrazení vaší databáze
Je mnohem jednodušší začít se silně typovaným zobrazením vaší databáze. Důsledným typováním objektu DataContext nepotřebujete volání funkce GetTable. Tabulky silného typu můžete použít ve všech dotazech, když použijete objekt DataContext silného typu.
V následujících krocích vytvoříte Customers jako silně typovanou tabulku, která se mapuje na tabulku Zákazníci v databázi.
Pro přísné typování objektu DataContext
Nad deklaraci třídy
Customerpřidejte následující kód.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 ClassUpravte
Sub Maintak, aby používal silně typovaný 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=WHITCStisknutí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.