Vous êtes sur la page 1sur 14

LINQ to SQL

Version 1.1

Chapitre 03 - LINQ to SQL

Sommaire

Introduction ..................................................................................................................................... 3 1.1 1.2 Rappels propos de LINQ ....................................................................................................... 3 LINQ to SQL.............................................................................................................................. 3

LINQ to SQL...................................................................................................................................... 3 2.1 Importer des tables ................................................................................................................. 3 Le concepteur Objet/Relationnel en mode graphique.................................................... 3 Le SQLMetal..................................................................................................................... 7

2.1.1 2.1.2 2.2

Grer le concepteur Objet/Relationnel ................................................................................... 9 Ajout de liaisons entre les tables..................................................................................... 9 Ajout de mthodes ........................................................................................................ 10

2.2.1 2.2.2 2.3 2.4

Lobjet DataContext ......................................................................................................... 11 Les requtes .......................................................................................................................... 12 Ajouter des donnes ..................................................................................................... 12 Modifier des donnes.................................................................................................... 12 Supprimer des donnes................................................................................................. 13

2.4.1 2.4.2 2.4.3 3

Conclusion ..................................................................................................................................... 14

Dotnet France Association

Chapitre 03 - LINQ to SQL

1 Introduction
1.1 Rappels propos de LINQ
LINQ a t cr afin de proposer de nouvelles solutions plusieurs problmes. En effet, les moyens de stockage de donnes sont trs diversifis : il existe plusieurs logiciels de bases de donnes (dont chacune possde leur syntaxe) et le XML. De plus, lorsquon souhaite accder aux donnes, nos requtes sont considres comme de simples chanes de caractres pouvant contenir des erreurs et entrainer de grandes difficults les corriger. Ensuite, le changement de source de donnes (par exemple ODBC vers Oracle) peut impliquer quelques modifications dans le code de votre application. LINQ (Language Integrated Query) permet de rsoudre ces problmes car il possde une syntaxe qui permet dutiliser lIntelliSense de Visual Studio et qui est compatible, sans changement de code, avec tout type de source de donnes. Les mots-cls utiliss par le LINQ sont dcrits et expliqus dans le chapitre LINQ to Objects. La base de donnes qui sera utilise est dcrite dans le chapitre ADO.NET Base de donnes. Pour plus dinformation propos du LINQ, vous pouvez consulter le chapitre Introduction au LINQ .

1.2 LINQ to SQL


Ce chapitre porte spcifiquement sur lutilisation de LINQ to SQL, cest--dire comment utiliser LINQ pour excuter des requtes SQL et comment utiliser le concepteur Objet/Relationnel. LINQ va de lui-mme transformer vos instructions en requtes SQL. Pour cela, il faut gnrer des classes qui reprsentent dans lapplication vos donnes prsentes dans la base de donnes.

2 LINQ to SQL
2.1 Importer des tables
Comme il a t dit dans lintroduction, afin dutiliser le LINQ, vous devez commencer par importer ou crer des classes correspondant vos tables. Vous pouvez crer manuellement vos classes comme il est dusage, mais cela peut prendre beaucoup de temps, cest pourquoi il est plus intressant de les importer car cela vous gnrera automatiquement le code ncessaire. Il existe deux mthodes pour importer vos classes : Le concepteur Objet/Relationnel en mode graphique Le SQLMetal

2.1.1

Le concepteur Objet/Relationnel en mode graphique Il faut bien noter que ce concepteur nest utilisable que pour SQL Server 2000, 2005, 2008 et Express. Il sera automatiquement lanc lorsque vous ajouterez dans votre projet un fichier de type .dbml . Cet outil est divis en deux parties : une partie va contenir les classes reprsentant les tables alors que lautre partie servira garder les procdures. Le tout reprsente ce quon appel le DataContext gnr.

Dotnet France Association

Chapitre 03 - LINQ to SQL Pour crer un fichier de type .dbml , il faut faire un clic droit sur votre projet puis Ajouter et enfin Nouvel lment :

Dotnet France Association

Chapitre 03 - LINQ to SQL Aprs cela, cette fentre devrait apparaitre :

Pour continuer, slectionner Classes LINQ to SQL puis faire Ajouter . Pour notre projet, nous nommerons le fichier Test.dbml . Comme prcis prcdemment, vous pouvez apercevoir voir distinctement les deux parties : une pour les classes lautre pour les procdures.

Dotnet France Association

Chapitre 03 - LINQ to SQL Il est ensuite possible laide du Server Explorer de dplacer graphiquement les tables vers la partie gauche du fichier .dbml :

Dans notre cas, nous avons pris la base de donnes nomm DotNetFrance , nous avons donc aprs le Drag and Drop de nos tables :

Comme vous pouvez le voir, la relation faite avec SQL Server 2005 apparat automatiquement.

Dotnet France Association

Chapitre 03 - LINQ to SQL Le mode graphique va aussi plus loin en vous proposant une Bote outils approprie :

Attention toutefois, si vous tentez dinsrer une classe provenant dune autre base de donnes, cela gnrera un message vous proposant de remplacer la connexion dj existante. Lorsque vous ajouterez une table, le concepteur gnrera le code ncessaire afin que le DataContext puisse initialiser les proprits de linstance de la classe et pour que les modifications faites sur ces proprits se rpercutent sur la base de donnes. Pour faire des mises jour, chaque classe insre possde trois proprits : Delete , Insert et Update .

2.1.2

Le SQLMetal Vous ne pouvez utiliser cet outil qu partir du Visual Studio Command Prompt . Il est disponible partir de votre menu dmarrer :

Dotnet France Association

Chapitre 03 - LINQ to SQL Les options que vous pouvez utiliser permettent de configurer le fonctionnement. Toutes les options ont cette structure : /VotreOption : SaValeur . Voici la liste des options possibles :

Option Code

Description Il prend comme valeur le nom dun fichier afin quil gnre le code source des classes contenues. Cette option permet de remplacer les options Database, Password, Server et User sous forme de chaine de caractres. Il prend comme valeur le nom du DataContext qui sera gnr. Il prend comme valeur le nom de votre base de donnes. Il prend comme valeur le nom dun fichier de mappage. Il prend comme valeur le nom de la classe de base de toutes les classes gnres. Il prend comme valeur le langage dans lequel le code sera gnr (seules valeurs possibles csharp ou vb ). Il prend comme valeur le nom de lespace de nom dans lequel les classes seront gnres. Il prend comme valeur le mot de passe associ un compte utilisateur. Il prend comme valeur le nom ou lIP de votre serveur. Il prend comme valeur le temps durant lequel SQLMetal tentera dtablir une connexion. Il prend comme valeur le compte utilisateur avec lequel se connecter la base de donnes.

Conn

Context Database Dbml Entitybase

Language

Namespace

Password

Server Timeout

User

Dotnet France Association

Chapitre 03 - LINQ to SQL Par exemple, nous pouvons faire ceci avec la base de donnes LINQtoSQL, voici la requte :

VB

SqlMetal /server:.\SQLServeur /database:DotNetFrance /language:vb /code:"C:\Documents and Settings\Cdric GERAUD\Mes documents\Visual Studio 2008\Projects\ListerFournisseur\ListerFournisseur\Program.cs"

//C#

SqlMetal /server:.\SQLServeur /database:DotNetFrance /language:csharp /code:"C:\Documents and Settings\Cdric GERAUD\Mes documents\Visual Studio 2008\Projects\ListerFournisseur\ListerFournisseur\Program.cs"

2.2 Grer le concepteur Objet/Relationnel


2.2.1 Ajout de liaisons entre les tables

Comme dit prcdemment, si des relations entre les tables de votre base de donnes existaient dj elles seront gnres automatiquement. Le concepteur permet aussi den crer de nouvelles qui sont similaires aux liaisons des bases de donnes classiques. Il est possible dajouter ces liaisons en faisant clic droit une des tables puis en faisant Ajouter :

Dotnet France Association

10

Chapitre 03 - LINQ to SQL

Ensuite, par exemple, nous avons cliqu sur Association qui ouvre un autre menu nous permettant de configurer les relations :

2.2.2

Ajout de mthodes Il est possible, grce au concepteur, de transformer les fonctions ainsi que les procdures stockes en mthodes du DataContext . Pour cela, il suffit, comme pour vos tables, de prendre la procdure stocke (dans notre cas ProcedureMethode ), puis de la faire glisser vers la partie droite de votre concepteur. Cette mthode permettra ds son appel dexcuter notre procdure stocke. Il faut par contre noter deux points : Le type de retour est, comme la mthode, gnr automatiquement Si votre procdure est dfinie par des paramtres, ces paramtres devront tre spcifis dans votre mthode.

Par exemple :

Dotnet France Association

11

Chapitre 03 - LINQ to SQL

2.3 Lobjet DataContext


Tout dabord, afin de pouvoir utiliser le DataContext , il faut rcuprer la rfrence System.Data.Linq . Cette rfrence est automatiquement gnre lorsque vous ajoutez une table un fichier .dbml . Le DataContext est le point dentre du LINQ to SQL, c'est--dire que cest partir de lui quon pourra utiliser nos objets et classes provenant de la base de donnes. Comme dit prcdemment, nous pouvons importer les tables et leurs relations grce au concepteur, ce qui les transforme en objets. Ces objets seront donc, grce au DataContext , utilisables. On peut ainsi manipuler notre base de donnes avec un langage orient objet. Comme toute classe, elle comprend des mthodes. Voici les mthodes principales dun DataContext :

Mthodes CreateDatabase

Description Permet de crer une base de donnes sur un serveur. Permet de savoir si une base de donnes peut tre ouverte. Permet de supprimer une base de donnes. Permet dexcuter des commandes SQL sur une base de donnes. Permet dexcuter des commandes SQL sur une base de donnes lorsquil est surcharg. Permet de rcuprer un accs aux objets modifis dans le DataContext . Permet de rcuprer les informations sur des commandes SQL faites par LINQ. Permet de traiter les objets modifis puis de rpercuter ces modifications sur la base de donnes.

DatabaseExists

DeleteDatabase ExecuteCommand

ExecuteQuery

GetChangeSet

GetCommand

SubmitChanges

Cest dans ce DataContext , quon pourra utiliser nos commandes en LINQ.

Dotnet France Association

12

Chapitre 03 - LINQ to SQL

2.4 Les requtes


Les requtes ainsi que leurs mots-cls sont expliqus dans le chapitre LINQ to Objects.

2.4.1

Ajouter des donnes Nous utilisons le C# 3.0 pour notre code. Pour ajouter des donnes notre table Employe de la base donnes DotNetFrance , il faut tout dabord instancier notre base de donnes dans le DataContext . Ensuite :
//C#

DotNetFrance maBaseDeDonnees = new DotNetFrance(); maBaseDeDonnees.Log = Console.Out; Employe nouvelEmploye = new Employe { Nom = "Test", Prenom = "Test", Role = 1 }; maBaseDeDonnees.Employe.InsertOnSubmit(nouvelEmploye); maBaseDeDonnees.SubmitChanges();

VB

Dim maBaseDeDonnees As DotNetFrance = New DotNetFrance() maBaseDeDonnees.Log = Console.Out Dim nouvelEmploye As Employe = New with Employe { Nom = "Test", Prenom = "Test", Role = 1 } maBaseDeDonnees.Employe.InsertOnSubmit(nouvelEmploye) maBaseDeDonnees.SubmitChanges()

Le SubmitChanges permet la modification dans la base de donnes comme vu dans le tableau prcdent.

2.4.2

Modifier des donnes Afin de modifier des donnes, il faut avant tous les obtenir grce une requte de slection. Avec les objets sous forme dinstance de classes, il ny a plus qu modifier leurs proprits.

Dotnet France Association

13

Chapitre 03 - LINQ to SQL Par exemple, nous allons modifier le rle dun employ de notre table Employe :
//C#

DotNetFrance maBaseDeDonnees = new DotNetFrance(); maBaseDeDonnees.Log = Console.Out; var requete = (from unEmploye in maBaseDeDonnees.Employe where unEmploye.Role == 0 select unEmploye); foreach (var unEmploye in requete) { unEmploye.Role = 1; } maBaseDeDonnees.SubmitChanges();

VB

Dim maBaseDeDonnees As DotNetFrance = New DotNetFrance() maBaseDeDonnees.Log = Console.Out Dim requete = From unEmploye In maBaseDeDonnees.Employes Where unEmploye.Role = 0 Select unEmploye For Each unEmploye In requete unEmploye.Role = 1 Next maBaseDeDonnees.SubmitChanges()

2.4.3

Supprimer des donnes La mthode pour supprimer des donnes est la mme que pour les modifier. Voici un exemple :
//C#

DotNetFrance maBaseDeDonnees = new DotNetFrance(); maBaseDeDonnees.Log = Console.Out; var requete = (from unEmploye in maBaseDeDonnees.Employe where unEmploye.Role == 0 select unEmploye); foreach (var unEmploye in requete) { maBaseDeDonnees.Employe.DeleteOnSubmit(unEmploye); } maBaseDeDonnees.SubmitChanges();

VB

Dim maBaseDeDonnees As DotNetFrance = New DotNetFrance() maBaseDeDonnees.Log = Console.Out Dim requete = From unEmploye In maBaseDeDonnees.Employe Where unEmploye.Role = 0 Select unEmploye For Each unEmploye In requete maBaseDeDonnees.Employe.DeleteOnSubmit(unEmploye) Next maBaseDeDonnees.SubmitChanges()

Dotnet France Association

14

Chapitre 03 - LINQ to SQL

3 Conclusion
Ce chapitre sur LINQ to SQL est maintenant termin. Nhsitez pas lire le chapitre LINQ to Objects afin de revoir tous les mots cls. Le LINQ to SQL permet dutiliser, avec le DataContext , une base de donnes avec le fonctionnement de la programmation objet. En effet, les tables de notre base de donnes sont transformes en objets utilisables, et peuvent tre par consquent manipuls en C#, langage orient objet. De plus, les requtes SQL associs vos modifications sont automatiquement faites par LINQ. Plus dinformations sur MSDN : http://msdn.microsoft.com/fr-fr/library/bb386976.aspx

Dotnet France Association

Vous aimerez peut-être aussi