Aller au contenu principal

7-3 Préparation à une première requête BD

Dans un premier temps, nous allons tenter de récupérer la liste complète des événements afin de les afficher. Pour obtenir et afficher la liste des événements (action Index()), il nous faudra:

  • Obtenir le Connection String pour accéder à la base de données
  • Créer une connexion à la BD
  • Effectuer une requête permettant de récupérer les événements et les associer au modèle Evenement.
  • Afficher les événements de la liste dans une vue

Support convention de nommage PostgreSQL

Dans nos modèles, nous utilisons la convention de nommage .NET en PascalCase (par exemple, VilleId ou ImagePath). Cependant, en Postgres, la convention est snake_case (par exemple, ville_id ou image_path). Si on veut que le lien puisse se faire entre le retour de la base de données et notre modèle, il faut configurer Dapper adéquatement.

Il existe une configuration Dapper que vous pouvez ajouter à votre program.cs:

Snowfall.Web.Mvc/Program.cs
builder.Services.AddMigrations(configuration.GetConnectionString("AppDatabaseConnection")!);

// Dapper match underscores: nom_propriete_underscore <-> NomProprieteUnderscore
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

Obtenir le ConnectionString

Si vous vous rappelez, pour les migrations, on obtient le ConnectionString à partir d'un objet configuration dans Program.cs.

Rappel

En .NET, ce qu'on appelle ConnectionString est une string identifiant les informations de connexion à la base de données.

On configure cette dernière dans appsettings.json.

Il est important de noter que plusieurs versions de appsettings.json peuvent exister. En effet, les informations de connexion de la base de données en développement vs celles de production (live) ne sont pas les mêmes.

Nous utiliserons appsettings.Development.json pour le développement. .NET s'occupe de récupérer le bon fichier en fonction de l'environnement.

Obtenir ConfigurationManager par injection de dépendances

Il est possible d'utiliser l'injection de dépendances pour obtenir cet objet de configuration dans le contrôleur via un constructeur. Nous verrons plus tard comment injecter nos propres dépendances, et nous en apprendrons un peu plus sur l'injection de dépendances, mais pour l'instant l'objet ConfigurationManager (implémentant IConfiguration) devrait déjà être présent pour l’injection, gracieuseté du framework.

Il peut donc être utilisé comme paramètre de constructeur et le framework nous fournira la dépendance (objet déjà instancié).

Snowfall.Web.Mvc/Controllers/EvenementsController.cs
public class EvenementsController : Controller
{
private IConfiguration _configuration;
private string _connectionString;

public EvenementsController(IConfiguration configuration)
{
_configuration = configuration;
_connectionString = _configuration.GetConnectionString("AppDatabaseConnection")!;
}
//...

Écrire la requête à la base de données

Dans la fonction Index(), nous allons premièrement écrire la requête SQL. Cette dernière est assez simple pour commencer puisqu'on veut retourner tous les événements.

Snowfall.Web.Mvc/Controllers/EvenementsController.cs
[Route("/")]
public IActionResult Index()
{
string sql = @"
SELECT * from evenements;
";
return View(new List<Evenement>());
}
info

Avec Dapper, les requêtes SQL seront écrites directement dans le code, sous forme de string. Évidemment, nous sortirons ces requêtes des contrôleurs, mais le principe demeurera le même.

astuce

On peut utiliser @ pour définir une chaine de caractère sur plusieurs lignes. À ne pas confondre avec la syntaxe Razor, qui utilise le même symbole, mais qui a un rôle différent.

Cela sera particulièrement pratique pour écrire nos requêtes SQL sans avoir à manuellement concaténer des lignes avec "+".

Donc, même si la requête est simple et peut tenir sur une seule ligne, prenons l'habitude d'utiliser @ dès qu'on veut définir une requête SQL.

Modifier le dialecte

Vous avez probablement remarqué que Rider vous surligne en jaune la requête avec un message comme quoi une source de données n'est pas configurée, ainsi qu'un dialecte.

Imgur

  1. Dans l'aide contextuelle, cliquez sur Change dialect to....
  2. Configurer à PostgreSQL le dialecte du projet. Imgur
  3. Cliquer sur Save

Configurer la source de données de Rider (si pas déjà fait)

Si ce n'est pas déjà fait, ajoutez votre base de données comme source de données avec l'aide contextuelle de Rider...

  1. Cliquer sur Configure Data source
  2. Cliquer sur le "+" pour ajouter une source de données Imgur
  3. Choisir PostgreSQL dans la liste
    Imgur
  4. Configurer la connexion à votre BD Imgur
  5. Cliquer sur OK

Refresh schema

Si vous avez une erreur du genre Unable to resolve table 'evenements'...

Cliquez sur More action... et faire Refresh schema.

Vous devriez maintenant avoir accès à l'autocomplétion pour écrire vos requêtes de base de données! 🎉