Dela via


LINQ och ADO.NET

Idag måste många affärsutvecklare använda två (eller flera) programmeringsspråk: ett högnivåspråk för affärslogik- och presentationsskikten (till exempel Visual C# eller Visual Basic) och ett frågespråk för att interagera med databasen (till exempel Transact-SQL). Detta kräver att utvecklaren är skicklig på flera språk för att vara effektiv och orsakar även språkmatchningar i utvecklingsmiljön. Ett program som till exempel använder ett API för dataåtkomst för att köra en fråga mot en databas anger frågan som en strängliteral med hjälp av citattecken. Den här frågesträngen är oläslig för kompilatorn och kontrolleras inte för fel, till exempel ogiltig syntax eller om kolumnerna eller raderna som den refererar till faktiskt finns. Det finns ingen typkontroll av frågeparametrarna och inget IntelliSense stöd heller.

Språkintegrerad fråga (LINQ) gör det möjligt för utvecklare att skapa uppsättningsbaserade frågor i sin programkod, utan att behöva använda ett separat frågespråk. Du kan skriva LINQ-frågor mot olika uppräkningsbara datakällor (dvs. en datakälla som implementerar IEnumerable gränssnittet), till exempel minnesinterna datastrukturer, XML-dokument, SQL-databaser och DataSet objekt. Även om dessa uppräkningsbara datakällor implementeras på olika sätt, exponerar de alla samma syntax- och språkkonstruktioner. Eftersom frågor kan skapas på själva programmeringsspråket behöver du inte använda ett annat frågespråk som är inbäddat som strängliteraler som inte kan förstås eller verifieras av kompilatorn. Genom att integrera frågor i programmeringsspråket kan Visual Studio-programmerare också vara mer produktiva genom att tillhandahålla kompileringstidstyp och syntaxkontroll och IntelliSense. De här funktionerna minskar behovet av frågefelsökning och felfixering.

Att överföra data från SQL-tabeller till objekt i minnet är ofta omständligt och felbenäget. LINQ-providern som implementeras av LINQ till DataSet och LINQ till SQL konverterar källdata till IEnumerable-baserade objektsamlingar. Programmeraren ser alltid data som en IEnumerable samling, både när du frågar och när du uppdaterar. Fullständigt IntelliSense stöd ges för att skriva frågor mot dessa samlingar.

Det finns tre separata ADO.NET LINQ-tekniker (Language-Integrated Query): LINQ till DataSet, LINQ till SQL och LINQ till entiteter. LINQ till DataSet ger mer omfattande, optimerad frågekörning via DataSet och LINQ till SQL gör att du direkt kan köra frågor mot SQL Server-databasscheman, och LINQ till entiteter gör att du kan köra frågor mot en entitetsdatamodell.

Följande diagram ger en översikt över hur ADO.NET LINQ-teknikerna relaterar till programmeringsspråk på hög nivå och LINQ-aktiverade datakällor.

LINQ to ADO.NET overview

Mer information om LINQ finns i Linq (Language Integrated Query).

Följande avsnitt innehåller mer information om LINQ till DataSet, LINQ till SQL och LINQ till entiteter.

LINQ till DataSet

DataSet är en viktig del av den frånkopplade programmeringsmodellen som ADO.NET bygger på och används ofta. LINQ till DataSet gör det möjligt för utvecklare att skapa mer omfattande frågefunktioner med DataSet hjälp av samma mekanism för frågeformulering som är tillgänglig för många andra datakällor. Mer information finns i LINQ till DataSet.

LINQ till SQL

LINQ till SQL är ett användbart verktyg för utvecklare som inte behöver mappning till en konceptuell modell. Genom att använda LINQ till SQL kan du använda LINQ-programmeringsmodellen direkt över befintligt databasschema. LINQ till SQL gör det möjligt för utvecklare att generera .NET Framework-klasser som representerar data. I stället för att mappa till en konceptuell datamodell mappas dessa genererade klasser direkt till databastabeller, vyer, lagrade procedurer och användardefinierade funktioner.

Med LINQ till SQL kan utvecklare skriva kod direkt mot lagringsschemat med samma LINQ-programmeringsmönster som minnesinterna samlingar och DataSet, utöver andra datakällor som XML. Mer information finns i LINQ till SQL.

LINQ till entiteter

De flesta program är för närvarande skrivna ovanpå relationsdatabaser. Vid något tillfälle måste dessa program interagera med de data som representeras i ett relationsformulär. Databasscheman är inte alltid idealiska för att skapa program, och de konceptuella programmodellerna är inte samma som de logiska databasmodellerna. Entitetsdatamodellen är en konceptuell datamodell som kan användas för att modellera data för en viss domän så att program kan interagera med data som objekt. Mer information finns i ADO.NET Entity Framework.

Via entitetsdatamodellen exponeras relationsdata som objekt i .NET-miljön. Detta gör objektskiktet till ett idealiskt mål för LINQ-stöd, så att utvecklare kan formulera frågor mot databasen från det språk som används för att skapa affärslogik. Den här funktionen kallas LINQ för entiteter. Mer information finns i LINQ till entiteter.

Se även