Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze walkthrough demonstreert het gebruik van LINQ to SQL-associaties om foreign-key-relaties in de database weer te geven.
Notitie
Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDEvoor meer informatie.
Deze walkthrough is geschreven met behulp van Visual C# ontwikkelinstellingen.
Vereiste voorwaarden
U moet stapsgewijze instructies hebben voltooid: Eenvoudig objectmodel en -query (C#). Deze procedure bouwt daarop voort, inclusief de aanwezigheid van het northwnd.mdf-bestand in c:\linqtest5.
Overzicht
Dit stappenplan bestaat uit drie hoofdtaken:
Voeg een entiteitsklasse toe om de tabel Orders in de northwind-voorbeelddatabase weer te geven.
Het aanvullen van aantekeningen aan de
Customerklasse om de relatie tussen deCustomerenOrderklassen te verbeteren.Een query maken en uitvoeren om het verkrijgen van
Ordergegevens te testen met behulp van deCustomerklasse.
Het in kaart brengen van relaties tussen tabellen
Maak na de Customer klassedefinitie de definitie van de Order entiteitsklasse die de volgende code bevat, waarmee wordt aangegeven dat Order.Customer als een vreemde sleutel verbonden is aan Customer.CustomerID.
De entiteitsklasse Order toevoegen
Typ of plak de volgende code na de
Customerklasse:[Table(Name = "Orders")] public class Order { private int _OrderID = 0; private string _CustomerID; private EntityRef<Customer> _Customer; public Order() { this._Customer = new EntityRef<Customer>(); } [Column(Storage = "_OrderID", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int OrderID { get { return this._OrderID; } // No need to specify a setter because IsDBGenerated is // true. } [Column(Storage = "_CustomerID", DbType = "NChar(5)")] public string CustomerID { get { return this._CustomerID; } set { this._CustomerID = value; } } [Association(Storage = "_Customer", ThisKey = "CustomerID")] public Customer Customer { get { return this._Customer.Entity; } set { this._Customer.Entity = value; } } }
De Klantklasse Annoteren
In deze stap maakt u aantekeningen voor de klasse om de Customer relatie met de Order klasse aan te geven. (Deze toevoeging is niet strikt noodzakelijk, omdat het definiƫren van de relatie in beide richtingen voldoende is om de koppeling te maken. Maar door deze aantekening toe te voegen, kunt u eenvoudig door objecten in beide richtingen navigeren.)
De klasse Klant annoteren
Typ of plak de volgende code in de
Customerklasse:private EntitySet<Order> _Orders; public Customer() { this._Orders = new EntitySet<Order>(); } [Association(Storage = "_Orders", OtherKey = "CustomerID")] public EntitySet<Order> Orders { get { return this._Orders; } set { this._Orders.Assign(value); } }
Een query maken en uitvoeren in de Customer-Order-relatie
U kunt nu rechtstreeks vanuit de Order objecten of in omgekeerde volgorde toegang krijgen tot Customer objecten. U hebt geen expliciete koppeling tussen klanten en orders nodig.
Toegang krijgen tot Orderobjecten met behulp van klantobjecten
Wijzig de
Mainmethode door de volgende code in de methode te typen of te plakken:// Query for customers who have placed orders. var custQuery = from cust in Customers where cust.Orders.Any() select cust; foreach (var custObj in custQuery) { Console.WriteLine("ID={0}, Qty={1}", custObj.CustomerID, custObj.Orders.Count); }Druk op F5 om fouten in uw toepassing op te sporen.
Notitie
U kunt de SQL-code in het consolevenster elimineren door commentaar uit
db.Log = Console.Out;te maken.Druk op Enter in het consolevenster om de foutopsporing te stoppen.
Een sterk getypte weergave van uw database maken
Het is veel eenvoudiger om te beginnen met een sterk getypte weergave van uw database. Door het DataContext object strikt te typen, hoeft u geen aanroepen naar GetTable te doen. U kunt sterk getypte tabellen in al uw query's gebruiken wanneer u het sterk getypte DataContext object gebruikt.
In de volgende stappen maakt u van Customers een sterk getypte tabel die overeenkomt met de tabel Klanten in de database.
Het DataContext-object sterk typen
Voeg de volgende code toe boven de
Customerklassedeclaratie.public class Northwind : DataContext { // Table<T> abstracts database details per table/data type. public Table<Customer> Customers; public Table<Order> Orders; public Northwind(string connection) : base(connection) { } }Wijzig de
Main-methode om de sterk getypte DataContext te gebruiken als volgt:// Use a connection string. Northwind db = new Northwind(@"C:\linqtest5\northwnd.mdf"); // Query for customers from Seattle. var custQuery = from cust in db.Customers where cust.City == "Seattle" select cust; foreach (var custObj in custQuery) { Console.WriteLine($"ID={custObj.CustomerID}"); } // Freeze the console window. Console.ReadLine();Druk op F5 om fouten in uw toepassing op te sporen.
De uitvoer van het consolevenster is:
ID=WHITCDruk op Enter in het consolevenster om de foutopsporing te stoppen.
Volgende stappen
In het volgende scenario (Walkthrough: Gegevens bewerken (C#)) ziet u hoe u gegevens bewerkt. Deze handleiding vereist niet dat u de twee walkthroughs in deze reeks die u al hebt voltooid, opslaat.