Aller au contenu principal

Rencontre 11

Contenu

  • Présentation de Database Diagrams dans SQL Server Management Studio
alt text
Details

alt text

  • Présentation du laboratoire de révision
  • Explication d'un contrôleur et de ses vues générées
  • Révision

Ressources et documentation:

Activités de la séance

Théorie:

Laboratoires

Travail personnel:

  • Terminer le laboratoire de révision
  • Travail sur le TP1

Révision

Details

Views et PartialViews

Contôleur Zombie
public IActionResult UneAction()
{
Zombie z = new Zombie(){
Name = "Nom du zombie"
};

// Par défaut, la vue qui est construite porte le nom de l'action et se trouve dans le répertoire qui a le nom du contrôleur
return new View(z);
// Il est possible de retourner une vue par son nom
// return new View("AutreNom", z);
}

Le modèle d'une vue c'est l'équivalent du paramètre d'une fonction et il est passé dans le contrôleur

Vue avec modèle
@model Zombie

<span>@Model.Name</span>

OU

Vue avec modèle et HtmlHelper
@model Zombie

<span>@Html.DisplayFor(model => model.Name)</span>

Génère simplement le html

<span>Puant</span>

Une vue partielle peut également avoir son propre modèle et on peut fournir la valeur avec le paramètre model

Vue partielle
<partial name="_NomDeLaVue" model="valeur"/>

ViewModels

On nomme ViewModels une classe que l'on utilise spécifiquement pour afficher une vue.

Elle contient généralement:

  • D'autres données
    • Des statistiques
    • Des listes pour faire des sélections
  • L'état de la page
    • La valeur courrante d'un champ de recherche
    • La pagination lorsque l'on peut voir une grande quantité de données
    • D'autres options

TagHelper et asp-for

Le mot "For" utilisé dans les fonctions suivantes fait référence aux propriétés du modèle fournit:

@model X

Regarder le html généré par les choses suivantes:

@Html.DisplayNameFor(model => model.Name)
@Html.DisplayFor(model => model.Name)
asp-for="Name"
asp-validation-for="Name"

EntityFramework (EF)

  • Propriétés de navigations
  • Relations
    • 1 à N
    • N à N
    • 1 à 1

Annotations

Exemples:

[StringLength(100, MinimumLength = 20)]

[Range(10,35)]

[Required(ErrorMessage = "EmailRequired")]

Révision du ?

Pour les propriétés de navigations avec une clé étrangère, il doit être sur les deux ou pas du tout

Relation obligatoire
public class Joueur
{
public int Id {get; set;}

// Relation obligatoire 1..1
public int EquipeId {get; set;}
public Equipe Equipe {get; set;}
}
Relation optionnelle
public class Joueur
{
public int Id {get; set;}

// Relation optionnelle 0..1
public int? EquipeId {get; set;}
public Equipe? Equipe {get; set;}
}

Validations

ModelState.IsValid

Comprendre le retour de View vs RedirectToAction!

Comprende la validation client VS serveur VS BD

Asynchrone

Comment transformer un méthode pour qu'elle soit asynchrone et puisse utiliser des méthodes asynchrones

3 choses:

  • Rendre la méthode async
  • Changer le type de retour pour une Task<X> où X est le type qui était retourné
  • Ajouter un await devant les appels à des méthodes asynchrones comme ToListAsync()

Étapes pour créer la base de données à partir du modèle de classes

Cette section présente les étapes permettant de créer la base de données en utilisant Asp.net Core et Entity Framework. Pour davantage de détails sur la nomenclature utilisée, référez-vous aux rencontres 3 et 4.

Le diagramme que nous allons utiliser est le suivant. On y retrouve les 3 types de relations (un à un, un à plusieurs et plusieurs à plusieurs).

alt text

Note : Nous avons ajouté peu de propriétés pour alléger le contenu du diagramme.


Étape 1. Création des modèles dans l'application

Dans l'application, faire un clic droit sur le répertoire Models pour ajouter les classes. Nous obtenons alors le résultat suivant :

alt text


Étape 2. Pour chacun des modèles, ajouter toutes les propriétés et les annotations

Modèle Enseignant :

  • On remarque ici deux utilisations différentes de StringLength avec une taille minimale ou non.

alt text


Modèle Cours :

  • Ici, nous utilisons Range pour les int.

alt text


Modèle CarteEtudiante :

  • Ici, nous utilisons DateTime pour les dates.

alt text


Modèle Etudiant :

  • Ici, nous faisons la distinction entre les propriétés obligatoires et celles qui sont optionnelles.

alt text

  • Annotation [Required] : Pour les propriétés obligatoires, vous n'êtes pas obligé d'ajouter l'annotation [Required] à vos propriétés. Par défaut, les propriétés non optionnelles sont considérées comme requises.

Étape 3. Ajouter la clé primaire dans chacun des modèles :

  • Dans l'exemple suivant, nous avons ajouté la clé primaire Id au modèle Enseignant et l'annotation [key]. Il faut le faire pour tous les modèles.

alt text


Étape 4. Ajouter les relations entre les modèles et les clés étrangères :

  • Voici une façon de procéder pour représenter les relations

1. Relation Un à Plusieurs :

  • Dans le diagramme nous avons une relation Un à Plusieurs entre les modèles Enseignant et Cours.

alt text

  • Attention : Remarquez l'annotation [ValidateNever] sur les propriétés de navigation. Il faut ajouter cette annotation sur chacune des propriétés de navigation pour éviter des problèmes de validation au niveau du ModelState.IsValid.

2. Relation Plusieurs à Plusieurs :

  • Dans le diagramme nous avons une relation Plusieurs à Plusieurs entre les modèles Etudiant et Cours.

alt text

  • Clé étrangère : Dans cette relation, nous n’avons pas à ajouter de clés étrangères.

  • Table associative : Puisqu’il s’agit d’une relation Plusieurs à Plusieurs, Entity Framework va générer pour nous une table associative dans la base de données. Si nous voulions stocker des informations supplémentaires entre ces deux modèles, par exemple la note de l’étudiant, il faudrait nous-même créer un modèle qui représenterait la table associative et qui aurait des relations avec Etudiant et Cours.


3. Relation Un à Un :

  • Dans le diagramme nous avons une relation Un à Un entre les modèles Etudiant et CarteEtudiante.

alt text alt text


Étape 5. Ajouter les DbSets dans le DbContext:

  • Pour chaque modèle ajouté, il faut ajouter un DbSet dans le DbContext.

alt text


Étape 6. Créer la migration et la base de données :

  1. Dans la console de gestionnaire de package, faites la commade suivante pour créer la migration.
add-migration nom_migration
  • Assurez-vous que la migration a été créée et qu'elle n'est pas vide (exemple du fichier de migration avec contenu partiel).

alt text

alt text

  1. Créer la base de données avec la commande suivante
update-database
  • Regardez dans l'explorateur d'objets SQL si la base de données a été créées et si les tables existent.

alt text

  • Remarquez ici qu'Entity Framework a créé une table associative CoursEtudiant puisqu'il y avait une relation Plusieurs à Plusieurs entre les tables Cours et Etudiant.