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 handleiding biedt een fundamenteel end-to-end LINQ naar SQL-voorbeeld met minimale complexiteit. U maakt een entiteitsklasse die de tabel Klanten modelleert in de voorbeelddatabase Northwind. Vervolgens maakt u een eenvoudige query om klanten weer te geven die zich in Londen bevinden.
Deze handleiding is gericht op code om LINQ to SQL-concepten te laten zien. Normaal gesproken gebruikt u de Object Relational Designer om uw objectmodel te maken.
Opmerking
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
In dit scenario wordt gebruikgemaakt van een toegewezen map ('c:\linqtest5') voor het opslaan van bestanden. Maak deze map voordat u met de rondleiding begint.
Voor deze handleiding is de Northwind-voorbeelddatabase vereist. Als u deze database niet op uw ontwikkelcomputer hebt, kunt u deze downloaden van de Microsoft-downloadsite. Zie Voorbeelddatabases downloaden voor instructies. Nadat u de database hebt gedownload, kopieert u het bestand naar de map c:\linqtest5.
Overzicht
Deze procedure bestaat uit zes hoofdtaken:
Een LINQ maken naar een SQL-oplossing in Visual Studio.
Een klasse toewijzen aan een databasetabel.
Eigenschappen in de klasse aanwijzen om databasekolommen weer te geven.
De verbinding met de Northwind-database opgeven.
Een eenvoudige query maken om uit te voeren op de database.
De query uitvoeren en de resultaten observeren.
Het maken van een LINQ-naar-SQL-oplossing
In deze eerste taak maakt u een Visual Studio-oplossing die de benodigde verwijzingen bevat om een LINQ te bouwen en uit te voeren naar een SQL-project.
Om een LINQ naar SQL-oplossing te maken
Wijs in het menu Bestand in Visual Studio de optie Nieuw aan en klik vervolgens op Project.
Klik in het deelvenster Projecttypen van het dialoogvenster Nieuw project op Visual C#.
Klik in het deelvenster Sjablonen op Consoletoepassing.
Typ LinqConsoleApp in het vak Naam.
Controleer in het vak Locatie waar u uw projectbestanden wilt opslaan.
Klik op OK.
LINQ-verwijzingen en -instructies toevoegen
In dit scenario worden assembly's gebruikt die mogelijk niet standaard in uw project worden geïnstalleerd. Als System.Data.Linq niet wordt vermeld als verwijzing in uw project (vouw het knooppunt Verwijzingen in Solution Explorer uit), voegt u dit toe, zoals wordt uitgelegd in de volgende stappen.
System.Data.Linq toevoegen
Klik in Solution Explorer met de rechtermuisknop op Verwijzingen en klik vervolgens op Verwijzing toevoegen.
Klik in het dialoogvenster Verwijzing toevoegen op .NET, klik op de assembly System.Data.Linq en klik vervolgens op OK.
De assembly wordt toegevoegd aan het project.
Voeg bovenaan Program.cs de volgende instructies toe:
using System.Data.Linq; using System.Data.Linq.Mapping;
Een klasse toewijzen aan een databasetabel
In deze stap maakt u een klasse en wijst u deze toe aan een databasetabel. Een dergelijke klasse wordt een entiteitsklasse aangeduid. Houd er rekening mee dat de toewijzing wordt uitgevoerd door alleen het TableAttribute kenmerk toe te voegen. De Name eigenschap geeft de naam van de tabel in de database op.
Een entiteitsklasse maken en koppelen aan een databasetabel
Typ of plak de volgende code in Program.cs direct boven de
Programklassedeclaratie:[Table(Name = "Customers")] public class Customer { }
Eigenschappen voor de klasse toewijzen om databasekolommen weer te geven
In deze stap voert u verschillende taken uit.
U gebruikt het ColumnAttribute kenmerk voor het aanwijzen
CustomerIDenCityeigenschappen van de entiteitsklasse als het weergeven van kolommen in de databasetabel.Je wijst de
CustomerIDeigenschap aan als een primaire sleutelkolom in de database.U wijst de velden
_CustomerIDen_Cityaan voor privéopslag. LINQ naar SQL kan vervolgens waarden rechtstreeks opslaan en ophalen, in plaats van openbare accessors te gebruiken die bedrijfslogica kunnen bevatten.
Kenmerken van twee databasekolommen weergeven
Typ of plak de volgende code in Program.cs tussen de accolades van de
Customerclass.private string _CustomerID; [Column(IsPrimaryKey=true, Storage="_CustomerID")] public string CustomerID { get { return this._CustomerID; } set { this._CustomerID = value; } } private string _City; [Column(Storage="_City")] public string City { get { return this._City; } set { this._City=value; } }
De verbinding met de Northwind-database opgeven
In deze stap gebruikt u een DataContext object om een verbinding tot stand te brengen tussen uw op code gebaseerde gegevensstructuren en de database zelf. Het DataContext is het hoofdkanaal waarmee u objecten ophaalt uit de database en wijzigingen verzendt.
Je declareert ook een Table<Customer> om te dienen als de logische, gespecificeerde tabel voor je query's op de tabel Klanten in de database. U maakt en voert deze query's uit in latere stappen.
De databaseverbinding opgeven
Typ of plak de volgende code in de
Mainmethode.Houd er rekening mee dat het
northwnd.mdfbestand zich in de map linqtest5 bevindt. Zie het gedeelte Vereisten eerder in deze walkthrough voor meer informatie.// Use a connection string. DataContext db = new DataContext (@"c:\linqtest5\northwnd.mdf"); // Get a typed table to run queries. Table<Customer> Customers = db.GetTable<Customer>();
Een eenvoudige query maken
In deze stap maakt u een query om te vinden welke klanten in de tabel Klanten zich in Londen bevinden. De querycode in deze stap beschrijft alleen de query. Het voert het niet uit. Deze benadering wordt de uitgestelde uitvoering genoemd. Zie Inleiding tot LINQ-query's (C#) voor meer informatie.
U produceert ook een logboekuitvoer om de SQL-opdrachten weer te geven die LINQ naar SQL genereert. Deze functie voor logboekregistratie (die gebruikmaakt) Logis handig bij het opsporen van fouten en bij het bepalen of de opdrachten die naar de database worden verzonden, uw query nauwkeurig vertegenwoordigen.
Een eenvoudige query maken
Typ of plak de volgende code in de
Mainmethode na deTable<Customer>declaratie.// Attach the log to show generated SQL. db.Log = Console.Out; // Query for customers in London. IQueryable<Customer> custQuery = from cust in Customers where cust.City == "London" select cust;
De query uitvoeren
In deze stap voert u de query daadwerkelijk uit. De query-expressies die u in de vorige stappen hebt gemaakt, worden pas geëvalueerd als de resultaten nodig zijn. Wanneer u de foreach iteratie start, wordt een SQL-opdracht uitgevoerd voor de database en worden objecten gerealiseerd.
De query uitvoeren
Typ of plak de volgende code aan het einde van de
Mainmethode (na de querybeschrijving).foreach (Customer cust in custQuery) { Console.WriteLine("ID={0}, City={1}", cust.CustomerID, cust.City); } // Prevent console window from closing. Console.ReadLine();Druk op F5 om fouten in de toepassing op te sporen.
Opmerking
Als uw toepassing een runtimefout genereert, raadpleegt u de sectie Probleemoplossing van Learning by Walkthroughs.
De queryresultaten in het consolevenster moeten er als volgt uitzien:
ID=AROUT, City=LondonID=BSBEV, City=LondonID=CONSH, City=LondonID=EASTC, City=LondonID=NORTS, City=LondonID=SEVES, City=LondonDruk op Enter in het consolevenster om de toepassing te sluiten.
Volgende stappen
De instructie: Het uitvoeren van query's op relaties (C#) sluit aan op het einde van deze handleiding. In de stapsgewijze handleiding voor het opvragen over relationele relaties ziet u hoe LINQ to SQL query's kan uitvoeren over tabellen heen, vergelijkbaar met joins in een relationele database.
Als u de stapsgewijze instructie voor query's over relaties wilt uitvoeren, moet u ervoor zorgen dat u de oplossing opslaat voor het scenario dat u zojuist hebt voltooid, aangezien dit een vereiste is.