Overzicht: Eenvoudig objectmodel en -query (C#)
Deze procedure biedt een fundamenteel end-to-end LINQ naar SQL-scenario 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 procedure is op code gebaseerd om LINQ aan SQL-concepten te laten zien. Normaal gesproken gebruikt u de Object Relational Designer om uw objectmodel te maken.
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 IDE (Personalizing the IDE) voor meer informatie.
Dit scenario is geschreven met behulp van Visual C# Development Instellingen.
Vereisten
In dit scenario wordt gebruikgemaakt van een toegewezen map ('c:\linqtest5') voor het opslaan van bestanden. Maak deze map voordat u met de procedure begint.
Voor dit scenario 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.
Een LINQ maken 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.
Een LINQ naar SQL-oplossing maken
Wijs in het menu Visual Studio-bestand 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 de volgende instructies toe boven aan Program.cs:
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 toewijzen aan een databasetabel
Typ of plak de volgende code in Program.cs direct boven de
Program
klassedeclaratie:[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
CustomerID
enCity
eigenschappen van de entiteitsklasse als het weergeven van kolommen in de databasetabel.U wijst de
CustomerID
eigenschap aan als een primaire-sleutelkolom in de database.U wijst en
_City
velden voor privéopslag aan_CustomerID
. 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 in de accolades voor de
Customer
klasse.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 maken ion opgeven voor de Northwind-database
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.
U declareert ook een Table<Customer>
om te fungeren als de logische, getypte tabel voor uw query's op basis van 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
Main
methode.Houd er rekening mee dat het
northwnd.mdf
bestand zich in de map linqtest5 bevindt. Zie de sectie Vereisten eerder in dit scenario 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 wordt niet uitgevoerd. 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
Main
methode 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
Main
methode (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.
Notitie
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=London
ID=BSBEV, City=London
ID=CONSH, City=London
ID=EASTC, City=London
ID=NORTS, City=London
ID=SEVES, City=London
Druk op Enter in het consolevenster om de toepassing te sluiten.
Volgende stappen
Het overzicht: Het uitvoeren van query's op relaties (C#) gaat verder waar dit scenario eindigt. In het overzicht van query's over relaties ziet u hoe LINQ naar SQL query's kan uitvoeren in tabellen, vergelijkbaar met joins in een relationele database.
Als u de procedure voor query's tussen relaties wilt uitvoeren, moet u ervoor zorgen dat u de oplossing opslaat voor het scenario dat u zojuist hebt voltooid. Dit is een vereiste.