Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework...

23
Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection Expert IT Table des matières

Transcript of Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework...

Page 1: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

Editions ENI

Entity Framework CoreMaîtrisez la solution de Mappage

Objet-Relationnel de Microsoft

CollectionExpert IT

Table des matières

Page 2: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

1Table des matières

Avant-propos

Chapitre 1

.NET et l’accès aux données

1. ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2. Mappage objet-relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3. LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4. Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.1 Database First et Model First. . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.2 Code First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5. D'Entity Framework 7 à Entity Framework Core . . . . . . . . . . . . . . . 275.1 Genèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.2 Une véritable version 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.3 Quand choisir Entity Framework Core ? . . . . . . . . . . . . . . . . . . 29

Chapitre 2

Modélisation

1. Installation d'Entity Framework Core . . . . . . . . . . . . . . . . . . . . . . . . 311.1 Dans une application .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321.2 Dans une application .NET Core. . . . . . . . . . . . . . . . . . . . . . . . . 39

1.2.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.2.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.2.3 OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence de l'ouvrage EIENT dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 3: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

2Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft

Entity Framework Core

2. Deux approches pour deux cas d'utilisation . . . . . . . . . . . . . . . . . . . . 462.1 Model First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.2 Database First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

3. Du modèle de données au modèle objet . . . . . . . . . . . . . . . . . . . . . . . 483.1 Point d'entrée : DbContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

3.1.1 Patron de conception Unit of Work . . . . . . . . . . . . . . . . . 493.1.2 Configuration de l'objet DbContext . . . . . . . . . . . . . . . . . 49

3.2 Collections d'enregistrements : DbSet<T> . . . . . . . . . . . . . . . . 533.3 Les enregistrements, des objets comme les autres . . . . . . . . . . . 54

4. Configuration du modèle objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.1 Trois manières de faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.1.1 Conventions pour simplifier la modélisation . . . . . . . . . . 574.1.2 Data annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594.1.3 Fluent API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614.1.4 Combiner les techniques de configuration . . . . . . . . . . . . 63

4.2 Inclusion/Exclusion de types d'entités . . . . . . . . . . . . . . . . . . . . 654.3 Inclusion/Exclusion de propriétés . . . . . . . . . . . . . . . . . . . . . . . . 694.4 Mappage des tables et colonnes. . . . . . . . . . . . . . . . . . . . . . . . . . 71

4.4.1 Types d'entités et tables. . . . . . . . . . . . . . . . . . . . . . . . . . . 714.4.2 Propriétés et colonnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

4.5 Définition d'une clé primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744.6 Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774.7 Configuration avancée des propriétés du modèle. . . . . . . . . . . . 86

4.7.1 Données obligatoires et facultatives . . . . . . . . . . . . . . . . . 864.7.2 Longueur maximale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.7.3 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894.7.4 Clés alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904.7.5 Valeurs générées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.7.6 Colonnes calculées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944.7.7 Valeurs par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Page 4: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

3Table des matières

5. Scaffolding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965.1 Console du gestionnaire de package NuGet . . . . . . . . . . . . . . . . 97

5.1.1 Arguments obligatoires : Connection et Provider . . . . . . 995.1.2 OutputDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015.1.3 Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025.1.4 Schémas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035.1.5 Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045.1.6 DataAnnotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.1.7 Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.1.8 Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

5.2 CLI .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105.2.1 Arguments obligatoires . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.2.2 output-dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135.2.3 context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145.2.4 schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.2.5 table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.2.6 data-annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165.2.7 force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175.2.8 json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175.2.9 verbose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

6. Migrations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196.1 Création d'une migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206.2 Mise à jour de la source de données . . . . . . . . . . . . . . . . . . . . . 1266.3 Suppression de migration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286.4 Génération de scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

Chapitre 3

Des objets au SQL

1. Modèle d'étude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

2. Fournisseurs de données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Page 5: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

4Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft

Entity Framework Core

3. Requêtage avec LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433.1 API et extension à C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443.2 Première requête LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

4. LINQ dans le détail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484.1 IEnumerable<T> et IQueryable<T> : les différences . . . . . . 1494.2 Opérateurs de projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

4.2.1 Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504.2.2 SelectMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

4.3 Opérateurs de partitionnement. . . . . . . . . . . . . . . . . . . . . . . . . 1544.3.1 Take. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554.3.2 Skip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

4.4 Opérateurs de tri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1574.4.1 OrderBy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1574.4.2 OrderByDescending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634.4.3 ThenBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1654.4.4 ThenByDescending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

4.5 Opérateur de regroupement. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1684.6 Opérateurs d'ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

4.6.1 Distinct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1704.6.2 Except . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724.6.3 Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1744.6.4 Intersect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

4.7 Opérateur de filtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.8 Opérateurs d'agrégation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

4.8.1 Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1804.8.2 LongCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1824.8.3 Min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834.8.4 Max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1854.8.5 Sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1864.8.6 Average . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

4.9 Opérateurs de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1884.9.1 Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1884.9.2 GroupJoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Page 6: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

5Table des matières

4.10 Opérateurs de conversion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1944.10.1Manipulation du type des enregistrements . . . . . . . . . . 1944.10.2Manipulation du type

des collections d'enregistrements . . . . . . . . . . . . . . . . . . 2014.10.3Conversion de type de collection : les écueils à éviter . . 205

4.11 Opérateurs de quantification. . . . . . . . . . . . . . . . . . . . . . . . . . . 2064.11.1Any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2064.11.2All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2074.11.3Contains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

4.12 Opérateurs d'élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2084.12.1First et FirstOrDefault . . . . . . . . . . . . . . . . . . . . . . . . . . . 2094.12.2Last et LastOrDefault. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2104.12.3Single et SingleOrDefault . . . . . . . . . . . . . . . . . . . . . . . . 212

5. Cycle de vie des entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2145.1 Cinq types de manipulations, cinq états . . . . . . . . . . . . . . . . . 2145.2 Détection des changements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

5.2.1 Détection automatique : AutoDetectChangesEnabled . 2205.2.2 Détection manuelle : DetectChanges . . . . . . . . . . . . . . . 2255.2.3 Stratégies de détection des changements . . . . . . . . . . . . 226

5.3 Attacher et détacher des entités . . . . . . . . . . . . . . . . . . . . . . . . 239

6. Validation des changements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

7. Assurer l’intégrité des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2477.1 Accès concurrents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

7.1.1 Loi du plus fort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2487.1.2 Contrôle d'accès concurrents optimiste . . . . . . . . . . . . . 2507.1.3 Contrôle d'accès concurrents pessimiste. . . . . . . . . . . . . 255

7.2 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2557.2.1 Implicites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2567.2.2 Explicites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

8. Visualisation du code SQL généré . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Page 7: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

6Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft

Entity Framework Core

Chapitre 4

Modélisation avancée

1. Séquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

2. Héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

3. Utilisation des procédures stockées. . . . . . . . . . . . . . . . . . . . . . . . . . 275

4. Shadow properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2794.1 Utilisation au cœur d'Entity Framework . . . . . . . . . . . . . . . . . 2794.2 Cas d'utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

4.2.1 Ajout de propriétés à un groupe d'entités . . . . . . . . . . . . 2834.2.2 Soft deletes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

5. Backing fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Chapitre 5

Création d’un fournisseur de données

1. Architecture modulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

2. Mise en place du fournisseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2982.1 Source de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3002.2 Informations importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3022.3 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

2.3.1 Fournisseur de données . . . . . . . . . . . . . . . . . . . . . . . . . . 3022.3.2 Application de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

3. Éléments de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

4. Services requis pour la sélection de données. . . . . . . . . . . . . . . . . . . 3184.1 QueryContextFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3184.2 ModelSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3204.3 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3224.4 EntityQueryModelVisitorFactory . . . . . . . . . . . . . . . . . . . . . . . 3244.5 EntityQueryableExpressionVisitorFactory . . . . . . . . . . . . . . . . 328

5. Entity Framework et arbres d'expressions . . . . . . . . . . . . . . . . . . . . 331

6. Gestion des annotations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Page 8: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

7Table des matières

7. Expressions de description de requête MongoDB . . . . . . . . . . . . . . 347

8. Shaping (façonnage d’entités) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3568.1 Command builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3588.2 Query generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3618.3 Database connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3658.4 Value buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3698.5 Materializer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3728.6 Shaper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3748.7 Création du shaper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3778.8 QueryContext et ShaperCommandContext . . . . . . . . . . . . . . 3818.9 QueryingEnumerable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3928.10 Expression de déclenchement initiale . . . . . . . . . . . . . . . . . . . . 396

9. ValueGeneratorCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

10. Mappage des champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

Page 9: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

Editions ENI

ASP.NET avec C# sous Visual Studio 2017

Conception et développement d’applications Web

CollectionExpert IT

Table des matières

Page 10: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

1Table des matières

Avant-propos

Chapitre 1Visual Studio 2017 et .NET

1. Nouveautés de Visual Studio 2017 . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.2 Interface du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.2.1 La page de démarrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.2.2 Les fenêtres de Visual Studio . . . . . . . . . . . . . . . . . . . . . . . 201.2.3 Les activités liées au développement . . . . . . . . . . . . . . . . . 261.2.4 Les packages NuGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.2.5 Les tests codés d'interface utilisateur . . . . . . . . . . . . . . . . 37

1.3 Gestion du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.3.1 Le mode plan et les régions . . . . . . . . . . . . . . . . . . . . . . . . 421.3.2 La refabrication (refactoring) . . . . . . . . . . . . . . . . . . . . . . . 431.3.3 Les extraits de code (code snippets) . . . . . . . . . . . . . . . . . 44

1.4 Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461.5 Contrôle du code source avec Visual Studio Online . . . . . . . . . 461.6 L'outil MS Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2. C#5 en bref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.1 Classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.2 Méthodes anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

2.2.1 Les événements internes . . . . . . . . . . . . . . . . . . . . . . . . . . 602.2.2 Les fonctions auxiliaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 632.2.3 Simplifier l'écriture du code . . . . . . . . . . . . . . . . . . . . . . . . 65

2.3 L'inférence de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage EI17CASP dans la zone de rechercheet validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 11: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

2sous Visual Studio 2017

ASP.NET avec C#

2.4 Les expressions lambdas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672.5 Classes dynamiques et types anonymes . . . . . . . . . . . . . . . . . . . 682.6 Extension de classes sans héritage . . . . . . . . . . . . . . . . . . . . . . . . 692.7 Types nullables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.8 Itérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

2.8.1 Itérateur en C#1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722.8.2 Itérateur à partir de C#3 . . . . . . . . . . . . . . . . . . . . . . . . . . 73

2.9 Généricité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742.9.1 Définir un type générique . . . . . . . . . . . . . . . . . . . . . . . . . 752.9.2 Spécialisation partielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772.9.3 Utilisation d'un type générique . . . . . . . . . . . . . . . . . . . . . 772.9.4 L'espace de noms System.Collections.Generic . . . . . . . . . 782.9.5 L'interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

3. Les variantes de .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.1 .NET Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.2 .NET Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Chapitre 2Les sites web ASP.NET

1. Le modèle de compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831.1 Du CGI au modèle ASP.NET 1.X . . . . . . . . . . . . . . . . . . . . . . . . 83

1.1.1 L'interface CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841.1.2 Les pages dynamiques ASP . . . . . . . . . . . . . . . . . . . . . . . . 87

1.2 Des classes partielles pour les pages . . . . . . . . . . . . . . . . . . . . . . 881.2.1 Structure d'une page ASPX . . . . . . . . . . . . . . . . . . . . . . . . 881.2.2 Modifications d'une page ASPX . . . . . . . . . . . . . . . . . . . . 90

1.3 Le code partagé dans App_Code . . . . . . . . . . . . . . . . . . . . . . . . . 911.4 Les assemblages référencés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

1.4.1 Références dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 941.4.2 Références explicites dans le fichier Web.config . . . . . . . 95

1.5 Le cache de construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961.6 Les applications web de Visual Studio . . . . . . . . . . . . . . . . . . . . 96

Page 12: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

3Table des matières

2. Le rôle du serveur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992.1 Le serveur IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

2.1.1 Le filtre ISAPI pour ASP.NET . . . . . . . . . . . . . . . . . . . . . . 992.1.2 Création d'un site web ASP.NET avec IIS . . . . . . . . . . . 100

2.2 Le serveur de développement ASP.NET . . . . . . . . . . . . . . . . . . 102

3. Le pipeline HTTP de IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033.1 Fonctionnement de IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

3.1.1 Premiers pas sous HTTP avec Telnet . . . . . . . . . . . . . . . 1043.1.2 Détail du traitement IIS. . . . . . . . . . . . . . . . . . . . . . . . . . 105

3.2 La classe HttpContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073.3 La classe HttpApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

3.3.1 Cycle de vie de l'application. . . . . . . . . . . . . . . . . . . . . . . 1083.3.2 Ajouter un fichier Global.asax . . . . . . . . . . . . . . . . . . . . . 1093.3.3 Créer un module HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . 113

3.4 Les gestionnaires (handlers) HTTP . . . . . . . . . . . . . . . . . . . . . . 1163.4.1 Créer un handler ASHX . . . . . . . . . . . . . . . . . . . . . . . . . . 1173.4.2 Créer un handler dans une DLL. . . . . . . . . . . . . . . . . . . . 120

Chapitre 3Les Web Forms

1. Présentation des Web Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231.1 Structure d'une page ASPX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

1.1.1 Style imbriqué, en ligne et séparé . . . . . . . . . . . . . . . . . . 1281.1.2 Les scriptlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311.1.3 Hiérarchie des contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . 1331.1.4 Ajouter dynamiquement des contrôles . . . . . . . . . . . . . . 1361.1.5 Objets intrinsèques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

1.2 Cycle de vie d'une page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.2.1 Le cycle nominal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.2.2 Identifier les requêtes de type postback . . . . . . . . . . . . . 143

Page 13: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

4sous Visual Studio 2017

ASP.NET avec C#

1.3 Les contrôles web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431.3.1 Les balises HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441.3.2 L'attribut runat="server" . . . . . . . . . . . . . . . . . . . . . . . . . 1451.3.3 Les contrôles HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471.3.4 Les contrôles web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481.3.5 Les contrôles à base de modèles (template) . . . . . . . . . . 1521.3.6 Les contrôles utilisateurs et les contrôles personnalisés . .152

1.4 Navigation entre les pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.4.1 Les liens hypertextes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.4.2 Redirections par serveur. . . . . . . . . . . . . . . . . . . . . . . . . . 154

1.5 Postback et cross postback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551.6 Les callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571.7 Validation des entrées utilisateur . . . . . . . . . . . . . . . . . . . . . . . 163

1.7.1 Principe de la validation . . . . . . . . . . . . . . . . . . . . . . . . . . 1631.7.2 Les contrôles de validation. . . . . . . . . . . . . . . . . . . . . . . . 1661.7.3 La validation personnalisée . . . . . . . . . . . . . . . . . . . . . . . 1701.7.4 La validation discrète . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

2. Organiser la présentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752.1 Thèmes et skins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

2.1.1 Les feuilles de style CSS . . . . . . . . . . . . . . . . . . . . . . . . . . 1752.1.2 D'autres approches des CSS . . . . . . . . . . . . . . . . . . . . . . . 1762.1.3 Les thèmes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.1.4 Les skins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

2.2 Les contrôles utilisateurs .ascx. . . . . . . . . . . . . . . . . . . . . . . . . . 1832.2.1 Créer un contrôle utilisateur . . . . . . . . . . . . . . . . . . . . . . 1842.2.2 Utiliser un contrôle utilisateur . . . . . . . . . . . . . . . . . . . . 1852.2.3 Ajouter des propriétés et des événements. . . . . . . . . . . . 186

2.3 Les pages maîtres (master pages). . . . . . . . . . . . . . . . . . . . . . . . 1902.3.1 Créer une page maître . . . . . . . . . . . . . . . . . . . . . . . . . . . 1912.3.2 Créer une page de contenu. . . . . . . . . . . . . . . . . . . . . . . . 1942.3.3 Programmer les pages maîtres et les pages de contenu . 1972.3.4 Appliquer dynamiquement une page maître . . . . . . . . . 199

Page 14: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

5Table des matières

3. Les composants personnalisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2003.1 Fonctionnement des composants personnalisés. . . . . . . . . . . . 200

3.1.1 Les types de composants personnalisés (custom controls) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

3.1.2 Création d'une bibliothèque de composants. . . . . . . . . . 2013.1.3 Mise au point du composant ColoredPad. . . . . . . . . . . . 2023.1.4 Enregistrement et tests . . . . . . . . . . . . . . . . . . . . . . . . . . 210

3.2 NumericTextBox, un composant dérivé de TextBox. . . . . . . . 2123.2.1 Création du contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2123.2.2 Propriétés et événements . . . . . . . . . . . . . . . . . . . . . . . . . 2123.2.3 Rendu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

3.3 ChartControl, un composant graphique utilisant GDI+ . . . . 2153.3.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2153.3.2 Rendu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2173.3.3 Intégration et tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

3.4 PictureBrowser, un composant basé sur un modèle. . . . . . . . . 2183.4.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2193.4.2 Implémentation du composant . . . . . . . . . . . . . . . . . . . . 2213.4.3 Les modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2223.4.4 Le rendu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2233.4.5 Les événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2263.4.6 Informations relatives à la conception

dans Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2273.4.7 Utilisation du composant . . . . . . . . . . . . . . . . . . . . . . . . 228

3.5 Des ressources incorporées aux DLL . . . . . . . . . . . . . . . . . . . . . 230

4. AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2324.1 Du callback à AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2324.2 Le gestionnaire de script ScriptManager . . . . . . . . . . . . . . . . . . 2334.3 Le composant UpdatePanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

4.3.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2374.3.2 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2374.3.3 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2394.3.4 Les triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Page 15: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

6sous Visual Studio 2017

ASP.NET avec C#

4.4 Le composant UpdateProgress. . . . . . . . . . . . . . . . . . . . . . . . . . 2424.5 Le Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2434.6 La programmation objet avec JavaScript . . . . . . . . . . . . . . . . . 244

4.6.1 Insertion de code JavaScript dans une page . . . . . . . . . . 2444.6.2 Créer des objets et des classes JavaScript . . . . . . . . . . . . 2464.6.3 Le style AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2494.6.4 Des classes dérivées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2504.6.5 Implémenter des interfaces . . . . . . . . . . . . . . . . . . . . . . . 251

4.7 Le modèle d'extension AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . 2524.7.1 Structure du framework . . . . . . . . . . . . . . . . . . . . . . . . . 2524.7.2 La classe d'application . . . . . . . . . . . . . . . . . . . . . . . . . . . 2544.7.3 Les contrôles AJAX du toolkit . . . . . . . . . . . . . . . . . . . . . 2574.7.4 Définir des contrôles personnalisés en JavaScript . . . . . 261

4.8 Introduction à jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2674.8.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2674.8.2 Parcourir le DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2684.8.3 Intervenir sur la page . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2694.8.4 Les plugins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Chapitre 4Les sites web MVC

1. L'approche MVC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2751.1 Le design pattern MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2751.2 Les évolutions de MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

2. Les sites ASP.NET MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2772.1 Création d'un site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2772.2 Organisation des répertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 2792.3 Création du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2802.4 Définition du contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2832.5 Ajout des vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

3. Définition des routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Page 16: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

7Table des matières

4. Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2904.1 D'une action à l'autre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2904.2 Mise à jour du modèle et redirection. . . . . . . . . . . . . . . . . . . . . 2964.3 Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

5. Le moteur de rendu Razor et les vues . . . . . . . . . . . . . . . . . . . . . . . . 2985.1 La syntaxe C# dans les vues CSHTML . . . . . . . . . . . . . . . . . . 298

5.1.1 Principes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2985.1.2 Les balises Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3005.1.3 Les méthodes de formulaires . . . . . . . . . . . . . . . . . . . . . . 3025.1.4 Créer ses propres extensions HTML . . . . . . . . . . . . . . . . 303

5.2 Structure et organisation des vues . . . . . . . . . . . . . . . . . . . . . . 3055.2.1 Les gabarits Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3055.2.2 Les vues partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3075.2.3 Rendu des scripts et des bundles . . . . . . . . . . . . . . . . . . . 308

6. Sécurisation des sites MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3086.1 Authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3086.2 Autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

7. Définir des zones (areas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

8. Les Single Page Applications (SPA) . . . . . . . . . . . . . . . . . . . . . . . . . . 3138.1 Utiliser les Web API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

8.1.1 Créer un projet Web API . . . . . . . . . . . . . . . . . . . . . . . . . 3148.1.2 Établir un modèle et un contrôleur . . . . . . . . . . . . . . . . . 3158.1.3 La page unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

8.2 Utiliser KnockOut pour la liaison de données . . . . . . . . . . . . . 318

Chapitre 5ASP.NET Core

1. Un site web ASP.NET Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3211.1 Création du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3211.2 Contenu du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Page 17: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

8sous Visual Studio 2017

ASP.NET avec C#

2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.1 Les fichiers Program et Startup . . . . . . . . . . . . . . . . . . . . . . . . . 325

2.1.1 Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.1.2 La classe Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

2.2 La configuration JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3272.2.1 appSettings.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3272.2.2 launchSettings.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3272.2.3 bundleConfig.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

2.3 Gestion des packages avec NuGet et Bower . . . . . . . . . . . . . . . 3292.3.1 Les packages NuGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3292.3.2 Les packages Bower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

2.4 Application de thèmes avec Bootstrap . . . . . . . . . . . . . . . . . . . 331

3. Développement MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3333.1 Les contrôleurs web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3333.2 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

4. Définir des environnements d’exécution . . . . . . . . . . . . . . . . . . . . . 3354.1 Détection de l'environnement d'exécution . . . . . . . . . . . . . . . . 3354.2 Définition d'environnements. . . . . . . . . . . . . . . . . . . . . . . . . . . 336

Chapitre 6L’accès aux données avec ADO.NET

1. Les bases d'ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3391.1 Le mode connecté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

1.1.1 La connexion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3401.1.2 La commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3421.1.3 Le DataReader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3441.1.4 Les paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3471.1.5 Les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

1.2 Les bases de données SQL Server. . . . . . . . . . . . . . . . . . . . . . . . 3521.2.1 Les déclinaisons du logiciel SQL Server. . . . . . . . . . . . . . 3521.2.2 Création de bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3541.2.3 Création de tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

Page 18: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

9Table des matières

1.2.4 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3581.2.5 Les procédures stockées . . . . . . . . . . . . . . . . . . . . . . . . . . 359

1.3 Rendre l'accès aux bases transparent. . . . . . . . . . . . . . . . . . . . . 3601.3.1 Le mode déconnecté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3611.3.2 DataAdapter et TableAdapter . . . . . . . . . . . . . . . . . . . . . 3631.3.3 Le mapping objet-relationnel

et les frameworks spécialisés . . . . . . . . . . . . . . . . . . . . . . 3701.3.4 Les fabriques ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . 370

2. Accès aux données à base de fournisseurs. . . . . . . . . . . . . . . . . . . . . 3742.1 Introduction au développement par fournisseurs . . . . . . . . . . 374

2.1.1 Contrôles sources de données en mode fournisseur. . . . 3752.1.2 Contrôles de présentation des données. . . . . . . . . . . . . . 376

2.2 Les sources SqlDataSource et AccessDataSource . . . . . . . . . . . 3772.2.1 La requête de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . 3772.2.2 Les requêtes de mises à jour . . . . . . . . . . . . . . . . . . . . . . . 3802.2.3 Les paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3812.2.4 Le cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

2.3 Le fournisseur ObjectDataSource . . . . . . . . . . . . . . . . . . . . . . . 3852.3.1 Le principe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3852.3.2 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3862.3.3 Paramètres de création . . . . . . . . . . . . . . . . . . . . . . . . . . . 3902.3.4 Gestion du cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3912.3.5 Une version avancée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

2.4 Le fournisseur XmlDataSource . . . . . . . . . . . . . . . . . . . . . . . . . 3982.5 LinqDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

2.5.1 Un DAO pour LinqDataSource . . . . . . . . . . . . . . . . . . . . 4022.5.2 Le contexte de données .dbml . . . . . . . . . . . . . . . . . . . . . 4042.5.3 Les événements de LinqDataSource . . . . . . . . . . . . . . . . 408

2.6 EntityDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4092.6.1 Le framework Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4092.6.2 Créer le modèle conceptuel . . . . . . . . . . . . . . . . . . . . . . . 4112.6.3 Requêter avec LINQ to Entities. . . . . . . . . . . . . . . . . . . . 4162.6.4 Mise en œuvre du composant EntityDataSource . . . . . 417

Page 19: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

10sous Visual Studio 2017

ASP.NET avec C#

3. Les composants graphiques de présentation des données . . . . . . . . 4203.1 Le composant GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

3.1.1 Présentation tabulaire des données . . . . . . . . . . . . . . . . . 4203.1.2 Les opérations de sélection et de navigation. . . . . . . . . . 4233.1.3 Les clés et les opérations de mise à jour . . . . . . . . . . . . . 4243.1.4 Les formatages et les tris . . . . . . . . . . . . . . . . . . . . . . . . . 4263.1.5 Les colonnes modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4283.1.6 La liaison bidirectionnelle . . . . . . . . . . . . . . . . . . . . . . . . 4293.1.7 Gérer les jointures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430

3.2 Le composant DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4343.2.1 Présentation du DetailsView . . . . . . . . . . . . . . . . . . . . . . 4343.2.2 Les événements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

3.3 Le composant FormView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436

Chapitre 7Gestion de l'état

1. Les différents moyens pour maintenir l'état . . . . . . . . . . . . . . . . . . . 4371.1 Les champs cachés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4371.2 Le ViewState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

1.2.1 Utiliser le ViewState dans un Web Form . . . . . . . . . . . . 4391.2.2 Contrôler l'application du ViewState . . . . . . . . . . . . . . . 440

1.3 La chaîne de requêtes (Query String) et les URI . . . . . . . . . . . 4411.4 Les cookies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

2. Les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4432.1 Utilisation de l'objet Session . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

2.1.1 Mémorisation d'un objet et recherche . . . . . . . . . . . . . . 4442.1.2 Initialisation de l'objet Session . . . . . . . . . . . . . . . . . . . . 4442.1.3 Sécurisation du jeton de session . . . . . . . . . . . . . . . . . . . 445

2.2 Sessions sans cookie et délai d'abandon de session. . . . . . . . . . 4452.2.1 Sessions sans cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4452.2.2 Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Page 20: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

11Table des matières

2.3 Services de conservation des données en session . . . . . . . . . . . 4462.3.1 Le processus en mémoire InProc . . . . . . . . . . . . . . . . . . . 4462.3.2 Le service Windows ASP.NET State Service. . . . . . . . . . 4482.3.3 Le service SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4492.3.4 Services personnalisés. . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

3. Les objets Application et Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4513.1 L'objet Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

3.1.1 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4513.1.2 Verrouillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

3.2 Le cache de données d'applications Cache . . . . . . . . . . . . . . . . 4523.2.1 Les dépendances de temps . . . . . . . . . . . . . . . . . . . . . . . . 4523.2.2 Le callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4543.2.3 Les dépendances fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . 4553.2.4 Les dépendances SQL sous SQL Server . . . . . . . . . . . . . . 456

3.3 Le cache HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4583.3.1 Cache de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4583.3.2 Fragments de pages en cache . . . . . . . . . . . . . . . . . . . . . . 4603.3.3 Les substitutions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4613.3.4 Les profils de cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

Chapitre 8Personnalisation et sécurisation

1. Sécurisation des sites ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4631.1 Le modèle de sécurisation du site . . . . . . . . . . . . . . . . . . . . . . . 463

1.1.1 Les objets de la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . 4631.1.2 L'authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4641.1.3 Les autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

1.2 Sécurisation en mode Windows . . . . . . . . . . . . . . . . . . . . . . . . 4661.2.1 Activation du mode d'authentification. . . . . . . . . . . . . . 4661.2.2 Configuration de IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4671.2.3 Autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

Page 21: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

12sous Visual Studio 2017

ASP.NET avec C#

1.3 Sécurisation en mode Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . 4691.3.1 Activation du mode Forms et création

d'une page de connexion . . . . . . . . . . . . . . . . . . . . . . . . . 4701.3.2 Endossements de rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . 4721.3.3 Le mode Forms sans cookie . . . . . . . . . . . . . . . . . . . . . . . 4751.3.4 Autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

1.4 Le fournisseur MemberShip. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4751.4.1 Fonctionnement du fournisseur . . . . . . . . . . . . . . . . . . . 4751.4.2 Utiliser AspNetSqlMembershipProvider. . . . . . . . . . . . . 478

1.5 Sécurisation en comptes d'utilisateurs individuels. . . . . . . . . . 4811.6 Le répertoire Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4831.7 Le référentiel local d'utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . 4851.8 Activer un référentiel externe . . . . . . . . . . . . . . . . . . . . . . . . . . 4871.9 Le fournisseur de rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

1.9.1 AspNetSqlRoleProvider . . . . . . . . . . . . . . . . . . . . . . . . . . 4901.9.2 WindowsRoleTokenProvider. . . . . . . . . . . . . . . . . . . . . . 491

1.10 Les contrôles intégrés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492

2. Présentation personnalisée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4932.1 Les profils utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

2.1.1 Formation du profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4932.1.2 Utilisation du profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4942.1.3 Groupage et types complexes . . . . . . . . . . . . . . . . . . . . . 495

2.2 Navigation au sein du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4972.2.1 Le fichier de définition du site . . . . . . . . . . . . . . . . . . . . . 4982.2.2 Le fournisseur SitemapProvider, l'API Sitemap

et le SitemapDataSource . . . . . . . . . . . . . . . . . . . . . . . . . 4992.2.3 Les contrôles associés à la navigation . . . . . . . . . . . . . . . 4992.2.4 Filtrer l'affichage selon le rôle de l'utilisateur . . . . . . . . . 500

2.3 Internationalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5012.3.1 Les ressources globales . . . . . . . . . . . . . . . . . . . . . . . . . . . 5012.3.2 Les ressources locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5032.3.3 Le composant Localize . . . . . . . . . . . . . . . . . . . . . . . . . . . 5042.3.4 Localisation des validations . . . . . . . . . . . . . . . . . . . . . . . 505

Page 22: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

13Table des matières

3. Les WebParts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5063.1 Du site web au portail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5063.2 Créer un portail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506

3.2.1 Le gestionnaire WebPartManager . . . . . . . . . . . . . . . . . . 5073.2.2 Les zones WebPartZone . . . . . . . . . . . . . . . . . . . . . . . . . . 5083.2.3 Les éléments WebPart . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

3.3 Les contrôles catalogues CatalogZone et PageCatalogPart . . . 5103.3.1 Le catalogue de zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5103.3.2 Un menu pour changer de mode . . . . . . . . . . . . . . . . . . . 5123.3.3 Donner des noms aux éléments. . . . . . . . . . . . . . . . . . . . 5133.3.4 Les éditeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

3.4 Créer des éléments personnalisés . . . . . . . . . . . . . . . . . . . . . . . 5153.4.1 Créer un WebPart à partir d'un composant utilisateur . 5153.4.2 Créer un WebPart personnalisé . . . . . . . . . . . . . . . . . . . . 5163.4.3 Connecter les éléments . . . . . . . . . . . . . . . . . . . . . . . . . . 519

Chapitre 9Les services web WCF et REST

1. Les services web WCF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5231.1 Le dialecte commun SOAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5241.2 Créer un service web WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526

1.2.1 Implémentation du service . . . . . . . . . . . . . . . . . . . . . . . 5261.2.2 Test du service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530

1.3 Consommer un service web. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5311.3.1 Génération du proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5311.3.2 Appel synchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5341.3.3 Appel asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

2. Les services web REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5382.1 Implémentation d'un service REST. . . . . . . . . . . . . . . . . . . . . . 5392.2 Utilisation d'un service REST . . . . . . . . . . . . . . . . . . . . . . . . . . 540

Page 23: Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft · Editions ENI Entity Framework Core Maîtrisez la solution de Mappage Objet-Relationnel de Microsoft Collection

14sous Visual Studio 2017

ASP.NET avec C#

Chapitre 10Configuration, déploiement et administration

1. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5431.1 Héritage de la configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . 5431.2 Configuration de test et de production. . . . . . . . . . . . . . . . . . . 545

1.2.1 Le gestionnaire de configuration de Visual Studio . . . . . 5451.2.2 Plusieurs fichiers de configuration Web.config. . . . . . . . 5461.2.3 Les pages d'erreurs du fichier Web.config . . . . . . . . . . . . 547

2. Déploiement des applications ASP.NET . . . . . . . . . . . . . . . . . . . . . . 5472.1 Déploiement manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

2.1.1 Création d'un répertoire virtuel . . . . . . . . . . . . . . . . . . . . 5472.1.2 Sélection des fichiers à copier . . . . . . . . . . . . . . . . . . . . . 5492.1.3 La page par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

2.2 Déploiement par le système de copie . . . . . . . . . . . . . . . . . . . . 5522.3 Déploiement avec Microsoft Azure. . . . . . . . . . . . . . . . . . . . . . 556

2.3.1 Création d'un compte Azure . . . . . . . . . . . . . . . . . . . . . . 5562.3.2 Vue d'ensemble de l'interface de gestion des services. . . 5572.3.3 Création d'un projet associé à un compte Azure . . . . . . 5582.3.4 Développement de l'application . . . . . . . . . . . . . . . . . . . 560

3. Supervision des applications ASP.NET . . . . . . . . . . . . . . . . . . . . . . . 5613.1 L'infrastructure de supervision Health Monitoring . . . . . . . . . 561

3.1.1 La hiérarchie des événements web . . . . . . . . . . . . . . . . . 5613.1.2 La hiérarchie des fournisseurs . . . . . . . . . . . . . . . . . . . . . 562

3.2 Mise en œuvre dans ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . 5623.2.1 Déclarer des événements . . . . . . . . . . . . . . . . . . . . . . . . . 5633.2.2 Déclarer des fournisseurs d'écoute. . . . . . . . . . . . . . . . . . 5633.2.3 Ajouter des règles d'abonnement. . . . . . . . . . . . . . . . . . . 563

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565