Kader Yildirim
LINQ à 360 degré, Partie 4
Cet article présente les principales fonctionnalités apportées par LINQ to SQL
Par Kader Yildirim publié le 01/08/2007 à 19:29, lu 3923 fois, 7 pages
 3 | Présentation de LINQ to SQL
Avant de regarder en détail LINQ to SQL je vous propose de créer un projet avec Visual Studio Orcas beta 1 afin de découvrir les assistants qui couvrent cette technologie.

La première étape, une fois le projet crée, est d'ajouter un nouvel élément de type LINQ to SQL File :
 
/content/99963165-48f8-4ea2-8ee1-cf36f376b8c7/AddNew.PNG
 
Cette opération ajoute un fichier portant l'extension dbml et contenant la description des éléments manipulés - tables, procédures stockées...- au format XML :

<?xml version="1.0" encoding="utf-8"?>

<DataContext dslVersion="1.0.0.0" Name="EntrepriseDataContext" AccessModifier="AutoLayout, AnsiClass, Class, Public"

    xmlns="http://schemas.microsoft.com/dsltools/ORDesignerObjects">

  <Elements>

    <DataClass Name="Adresse" Source="dbo.Adresse" AccessModifier="AutoLayout, AnsiClass, Class, Public" IsReadOnly="false">

      <Child>

        <Association RelationName="FK_Site_Adresse" Unique="false" SourceKey="AdresseID" TargetKey="AdresseID"

            Name="Adresse_Site">

          <DataClassMoniker Name="/EntrepriseDataContext/Site" />

          <MemberProperty>

            <associationProperty Name="Sites" readOnly="false" />

          </MemberProperty>

          <ReverseMemberProperty>

            <associationProperty Name="Adresse" readOnly="false" />

          </ReverseMemberProperty>

        </Association>

      </Child>...

L'étape suivante consiste à choisir les tables, les procédures stockées, les fonctions... que l'on souhaite manipuler :
 
/content/99963165-48f8-4ea2-8ee1-cf36f376b8c7/AddTables.PNG
 
Ces opérations alimentent le fichier dbml ainsi qu'un fichier de code source faisant le mapping. En effet le lien entre les deux mondes est assuré par l'intermédiaire d'attributs que nous allons analyser par la suite de cet article.

Il est possible d'obtenir le même résultat en utilisant l'utilitaire SQLMetal.exe qui se trouve dans le répertoire %Program Files%\Microsoft Visual Studio 9.0\SDK\v3.5\Bin avec une ligne de commandes du type :

C:\Program Files\Microsoft Visual Studio 9.0\SDK\v3.5\Bin>sqlmetal /server:xxxx

    /database:linq2sql /sprocs /pluralize /code:output.cs /map:mapping.xml /xml:output.dml

Cet outil permet, en plus, de choisir la manière dont le lien entre les classes générées et la base de données est faite : soit par les attributs .Net soit par un fichier de mapping externe (option /map) :

<?xml version="1.0" encoding="utf-8"?>

<Database xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="linq2sql">

  <Table Name="Adresse">

    <Type Name=".Adresse">

      <Column Name="AdresseID" Member="AdresseID" Storage="_AdresseID" DbType="Int NOT NULL IDENTITY"

              IsPrimaryKey="True" IsDBGenerated="True" AutoSync="OnInsert" />

      <Column Name="Rue" Member="Rue" Storage="_Rue" DbType="NVarChar(50) NOT NULL" CanBeNull="False" />

      <Column Name="CodePostal" Member="CodePostal" Storage="_CodePostal" DbType="Int NOT NULL" />

      <Column Name="Ville" Member="Ville" Storage="_Ville" DbType="NVarChar(50) NOT NULL" CanBeNull="False" />

      <Column Name="Timestamp" Member="Timestamp" Storage="_Timestamp" DbType="rowversion NOT NULL" CanBeNull="False"

              IsDBGenerated="True" IsVersion="True" AutoSync="Always" />

      <Association Name="FK_Site_Adresse" Member="Sites" Storage="_Sites" ThisKey="AdresseID" OtherTable="Site"

                   OtherKey="AdresseID" DeleteRule="NO ACTION" />

    </Type>

  </Table>...

 
» Démarrer une discussion
 
Discussion démarée par Mitsuru Furuta le 08/08/2007 à 21:18, 1 commentaire(s).
Discussion démarée par ButhodS le 24/06/2008 à 10:55, 1 commentaire(s).
Discussion démarée par Matthieu Mezil le 08/08/2007 à 16:56, 1 commentaire(s).
Discussion démarée par Matthieu Mezil le 07/08/2007 à 17:37, 1 commentaire(s).
Discussion démarée par Matthieu Mezil le 06/08/2007 à 12:32, 2 commentaire(s).
Discussion démarée par steftanguy le 13/12/2007 à 23:00, 4 commentaire(s).